2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
- 문제 해결 방법
이 문제도 처음 그림을 봤을때 위치를 어떻게 하면 찾는가 를 생각하는데 오래걸렸다 배열을 만들어서 BFS ? 형식으로 찾아가야하나 생각했지만 수학파트 답게 각 층은 6의 배수 형태로 층을 나뉘어 간다는것을 확인하였다.
우선, 1번 방은 1번째 육각형에 위치한다. 다음으로 2번부터 7번 방은 2번째 육각형에 위치한다. 8번부터 19번 방은 3번째 육각형에 위치하며, 이후로는 6의 배수마다 새로운 육각형이 추가된다.
따라서 이 문제는 주어진 방 번호가 몇 번째 육각형에 위치하는지를 찾아내면 된다. 이를 위해 반복문을 이용하여 주어진 방 번호가 현재까지의 방 개수보다 큰지를 판별하고, 크다면 현재까지의 방 개수에 6을 곱한 값만큼 더해준다. 이를 반복하면서 주어진 방 번호가 위치하는 육각형의 번호를 구할 수 있다.
이후에는 구한 육각형의 번호를 출력하면 된다.
- 소스코드
N = int(input())
sum = 1
floor = 1
while sum < N:
sum += 6 * floor
floor += 1
print(floor)
- 코드해설
우선, 주어진 방 번호를 N이라는 변수에 저장한다. sum과 floor는 각각 현재까지의 방 개수와 현재 위치한 육각형의 번호를 나타내는 변수이다.
while문을 이용하여 현재까지의 방 개수가 주어진 방 번호보다 작은 경우, 6을 곱한 값을 더해나가며 육각형 번호를 찾아낸다.
마지막으로, 구한 육각형 번호를 출력
'Backjoon' 카테고리의 다른 글
| Backjoon Problem 10757 큰 수 덧셈 - Python (0) | 2023.05.03 |
|---|---|
| Backjoon Problem 달팽이는 올라가고 싶다 - Python (0) | 2023.05.03 |
| 백준 1193번 "분수 찾기" 문제 (0) | 2023.05.03 |
| backjoon - problem 2903 중앙 이동 알고리즘 (0) | 2023.05.02 |
| Backjoon - problem 2720 세탁소 사장 동 (0) | 2023.05.02 |