백준 2292번 벌집 자바 / 백준 단계별로 풀어보기 7단계 / 7. 기본 수학 1
백준 7단계 2번 문제 - 2292 벌집
https://www.acmicpc.net/problem/2292
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
7. 기본 수학 1
(2) 백준 2292번 문제
벌집
문제
과정 생각해보기
이렇게 한줄당 숫자의 개수가 6씩 늘어나는 것을 볼 수 있다
개수 구하는 공식은 개수 = 끝수 - 첫번째수 + 1
2부터 시작해서 6개씩은 2개 → 끝수 - 2 + 1 = 6(6*1(count)) → 끝수 = 6 + 1 = 7
그 끝수부터 12개씩은 3개 → 끝수 - 7 - 1 + 1 = 12(6*2) → 끝수 = 12 + 7 = 19
그 끝수부터 18개씩은 4개 → 끝수 - 19 -1 + 1 = 18(6*3) → 끝수 = 18 + 19 = 37
우리가 구하고 싶은 답은 count + 1
또한 끝수들은 6의 배수씩 차이난다
라고 보면 된다
오답
배열 크기는 어떻게 해야할지 몰라서 당연히 저것보단 적겠지만 문제에서의 최대수를 입력했다
위같은 코드를 쓰면 아래와 같은 계산 방식을 거쳐 도출할 수 있을 것 같은데,
if문에서 <= 를 쓸 수 없다며 The operator <= is undefined for the argument type(s) boolean, int 오류가 떴다
너무 값이 크다는 오류도 뜨길래 임의로 배열 크기의 자리수만 하나 적게 넣어주고;
n과의 크기 비교도 항을 나누어 적어줬는데 이러면 답이 이상하게 나온다
백준에는 시간초과나 메모리초과가 뜬다
정답 인정 코드
찾은 규칙은 같은데 식을 간략화하는 게 아직 어렵다
이게 알고리즘의 핵심일텐데..~!
직후 백지 복습