벌집 성공 출처
시간제한 메모리 비율
2 초 | 128 MB | 74894 | 33891 | 29251 | 45.334% |
문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
예제 입력 1
13
예제 출력 1
3
BufferedReader로 입력값을 받는다
입력값이 숫자로 들어오기 때문에 int형 타입 N 변수에 입력값을 담는다
1번 방에서 출발해서 가는 것이 아니고,
1번 방부터 들어가는 것까지 지문에서 카운트를 세기 때문에
cnt를 1부터 시작하게끔 변수를 선언하였고
range는 입력값이 1일 때를 제외하고 2부터 범위가 시작되기 때문에 2로 선언하였다
위에서 언급한 바와 같이
입력값이 1일 때는 If조건문으로 예외처리를 해주고
else 부분에서 범위를 체크해서 몇 번 만에 갈 수 있는지 카운트를 세서 출력하는 방법이다
range가 2부터 시작해서 해당 입력값보다 작거나 같을 때를 조건으로 건다
이때 while문은 쉽게 설명하면 안 될 때까지 계속해서 반복하므로
범위가 해당 숫자를 초과하지 않을 때까지 계속해서 반복문을 돌리기 때문에
해당 숫자까지의 가는 카운트를 셀 수 있다
육각형 모양의 벌집이기 때문에
벌집 모양을 보면 규칙이 있다는 것을 알 수 있다
한 범위가 끝날 때마다 다음 범위는 6의 배수만큼 늘어난다
코드로 표현하면 range = range + (6 * count)
이렇게 코드를 작성하고 카운트를 누적해서 더해주면 된다
'TIL > Algorithm' 카테고리의 다른 글
Java 백준 2869번 문제 - 달팽이 (0) | 2021.10.14 |
---|---|
Java 백준 1193번 문제 - 분수 찾기 (0) | 2021.10.13 |
Java 백준 1712번 문제 - 손익분기점 (0) | 2021.10.11 |
Java 백준 1316번 문제 - 그룹 단어 체커 (0) | 2021.10.10 |
Java 백준 2941번 문제 - 크로아티아 알파벳 (0) | 2021.10.09 |