백준 오답노트/기본 수학1

백준 - 기본 수학1 2292번 벌집 / 구글로 해결

초보병일이 2022. 11. 30. 17:13
728x90

문제

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

입력

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.

출력

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

예제 입력 1 복사

13

 

예제 출력 1 복사

3

 

이 문제에 대한 접근 자체를 하지 못했다.

 

처음에 규칙을 찾으려고 엄청 노력했었는데 규칙만 찾았을 뿐, 그 이후에 해결을 아예 하지 못했기 때문에 인터넷으로 풀이 과정을 공부하고 해결했다.

 

https://st-lab.tistory.com/73 이 블로그를 보고 해결할 수 있었다.

 

이 규칙은 나도 찾은 규칙인데, 아직 많이 부족한가보다..

 

= 정답 코드 =

오답이라고 하기에도 애매하다.

 

그냥 이 사람의 풀이를 내 것으로 만들었다.

 

2~7까지의 숫자는 벌집 갯수가 6개, 그리고 최단 루트는  2

 

8~19까지의 숫자는 벌집 갯수가 12개, 그리고 최단 루트 3

 

이런식으로 규칙을 찾은 후, 내가 입력한 n값이 1일 때는 당연히 1을 출력하고

 

1이 아닐 때, range에 6 * count를 더하면 8, 20, 38 이런식으로 증가하는데

 

이 값이 n보다 크면 while문이 종료되고 그 count 값이 바로 최단 루트인 것이다.

 

생각해보면 쉬운 문제였지만 ... 접근을 못했다 더 열심히 노력해야겠다.

728x90