위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
이번 문제는 벌집이 어떻게 생겼는지 알아야 그 규칙을 알 수 있다.
벌집은 위의 사진과 같이 육각형으로 이루어져있다(위의 사진을 보면 알 수 있다).
육각형의 벌집모양은 바깥으로 범위가 넓어질때마다 6의 배수로 늘어난다는 규칙이 있다
이때에 첫번째 칸부터 바깥쪽으로 점점 넓어질때에 어느 숫자를 입력하면 그 숫자까지로
갈때의 최소의 숫자를 알아야 한다.
! 변수 count는 반복문의 반복 횟수를 체크하여준다(count의 반복횟수가 해당 벌집까지의 최소 거리이다)
1.변수 search은 반복문이 돌때마다 6의 배수만큼씩 숫자가 더해진다
search += 6, search += 12, search += 18 , search += 24....
(1은 첫번째 칸이기 때문에 1을 입력하면 바로 출력해준다)
(search에 더해질 숫자는 우리가 찾아가야할 벌집의 범위이다 2~7, 8~19 ...)
2. while문이 돌때마다 벌집을 찾기위해 벌집을 찾는 search의 변수의 숫자 범위가 점점 넓어진다
while문을 알기쉽게 한줄씩 적어보겠다
(입력받은 찾아야할 방 변수의 수 room = 13)
while 1 : room >= search room은 search보다 크거나 같다 true,
search += count * 6 변수 search에는 0이 더해지고 count++;
(search = 2, count = 1)
while 2 : room >= search room은 search보다 크거나 같다 true,
search += count * 6 변수 search에는 6이 더해지고 count++;
(search = 8, count = 2)
while 3 : room >= search room은 search보다 크거나 같다 true,
search += count * 6 변수 search에는 12가 더해지고 count++;
(search = 20, count = 3)
while 4 : room >= search room은 search보다 크거나 같다 false,
false가 되었기에 while문은 멈추게 되었고
우리가 찾아야할 번호를 담은 변수 room은 13을 입력받았고 벌집의 범위를 계산해주는 search는 20이되었다.
이때에 반복문을 총 3번 반복하였고 count는 3이되었다
벌집이 6의 배수로 늘어난다는 규칙을 이용하였기 때문에 변수 count를 이용하여 room이 몇번째 6의 배수의
범위에 있는지 체크하여주었고
범위 안에 해당된다면 room까지 가는 최소 거리가 나오는 것이다
(글로는 최대한 쉽게 적은것 같으나 글쓴이의 설명 능력이 아직 많이 부족하니 그림을 참고하면 바로 이해할 수 있을것이라 생각한다.)
#글쓴이가 이 백준 기초수학 단계에 와서 느낀점은 어떤 문제든 그렇지만
규칙들이 있다는 것이고 이 규칙들을 공식화 해낼수 있어야 한다는 것이다.
글쓴이는 슬프게도 규칙을 찾기위해 그림을 보며 벌집의 범위가 언제 늘어나는지 세어보았다...
(왜 벌집이 육각형 모양인것을 인지하지 못한것인지 풀고 나니 참 왜 그랬나 싶다..ㅎㅎ
이렇게 경험이 쌓이고 실력이 느는건가 싶기도 하다, 덕분에 다음에 비슷한 문제가 나오면 수월하게 정답을
찾을수 있을것 같다!)
'기능,개념 & 알고리즘 > 알고리즘' 카테고리의 다른 글
백준 1193 Java (0) | 2021.09.27 |
---|---|
백준 3052 자바 (0) | 2021.09.06 |
백준 1712 자바 (0) | 2021.09.03 |
백준 2980 자바 (0) | 2021.09.02 |
백준 2941 자바 (0) | 2021.09.02 |