벌집
2 초 | 128 MB | 92978 | 41745 | 35946 | 44.808% |
문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
예제 입력 1 복사
13
예제 출력 1 복사
3
출처
ICPC > Regionals > Asia Pacific > Korea > Nationwide Internet Competition > Seoul Nationalwide Internet Competition 2004 B번
- 문제의 오타를 찾은 사람: waylight3
정답 코드 :
n = int(input())
beeHouse = 1
c = 1
while n>beeHouse:
beeHouse += 6*c
c += 1
print(c)
풀이 :
1 (1 + 6*0) | 2~7 (1 + 6*1) | 8~19 (1 + 6*2) | 20~37 (1 + 6*3) | |
1번부터의 거리 (c) | 1 | 2 | 3 | 4 |
주어진 n의 값이 beeHouse(최초 설정값 = 1)보다 큰 경우, while문이 돌아간다. (n이 1인 경우 바로 print(c)를 하게 된다.)
beeHouse에 6*c 를 해준 값을 더한다. 여기서 c는 디폴트값 = 1이며 count (1번 벌집부터의 거리)를 말한다. 매번 while문이 돌아갈 때마다 c += 1이 된다.
처음 beeHouse에 6*c 를 해주게 되면 위 표의 7이 나온다. beeHouse의 값은 1 -> 7 -> 19 -> 37 이렇게 늘어난다.
위의 표에서 첫번째 줄에 1, 7, 19, 37(1번부터의 거리 c로 나눠진 수 중 가장 큰 수) 을 beeHouse라고 생각하면 된다. 이 수들을 기준으로
n이 1보다 크면 ? 6을 더해주고 count + 1해주고 == 벌집 1로부터 1칸 이동됨
다시 n이 7보다 크면? 6*2를 더해주고 count+1 해주고 == 벌집 1로부터 2칸 이동됨
.
.
.
반복
위처럼 beeHouse값이 늘어난다는 것은 아직 n값보다 beeHouse값이 더 작다는 뜻으로
어느 순간 n값보다 커지게 되면 while문을 실행하지 않고 print(c) 를 하게 된다.
'Python > Python 코딩테스트' 카테고리의 다른 글
[백준] 1712번 손익분기점 파이썬 python (0) | 2022.02.04 |
---|---|
[백준] 1316번 그룹 단어 체커 파이썬 python (0) | 2022.02.03 |
[백준] 2941번 크로아티아 알파벳 파이썬 python (0) | 2022.02.03 |
[백준] 10809번 알파벳 찾기 파이썬 python (0) | 2022.01.27 |
[백준] 8958번 OX퀴즈 파이썬 python (0) | 2022.01.26 |
댓글