티스토리 뷰

문제

 

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

 

입력

 

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

출력

 

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

 


 

처음에는 일정 위치에서 숫자 번호를 찾아가는 문제인 줄 알고 어떻게 풀까 고민들 했다.

하지만 문제는 1에서 번호의 위치까지 찾아가는 것이므로 간단하다.

 

규칙은 다음과 같다.

벌집이 커지면 커지는게 규칙이 있다.

 

벌집 단계별로 최대 숫자를 보면

1 7 19 37 61로 구성 되어 있다.

 

6, 12, 18, 24 순서로 6의 배수로 커지고 있는 것이다.

 

이를 토대로 코드를 작성하면 다음과 같다.

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
	public static void main (String[] args) throws java.lang.Exception {
	    Scanner in = new Scanner(System.in);

		int N = in.nextInt();
		
		int cnt = 1;
		int num = 1;
		
		while(N>num){
		    
		    num += 6*cnt;
		    cnt++;
		    
		}
		
		System.out.println(cnt);

		}

}

 

다음 사람들의 코드와 조금 차별점을 둔 점은 

N이 1일 경우 제외하는 2일때 부터 코드를 작성했다면 

if (N == 1) {
      System.out.println(1);
} else {
       while (range <= N) {
           range = range + (6 * count);
           count++;
       }

 

 

나는 따로 구현하지 않았다.

while(N>num){
	num += 6*cnt;
	cnt++;
}

 

 

만약 N과 num이 모두 1이면 어쩌피 while문이 작동하지 않아 1을 출력하기 때문이다.

 

 

'일상 > 코드 챌린지' 카테고리의 다른 글

백준 3009 네 번째 점[JAVA]  (0) 2024.10.17
백준 9506 약수들의 합 [JAVA]  (1) 2024.10.16
백준 2745 진법 변환  (0) 2024.10.14
백준 2566 최대값 [JAVA]  (1) 2024.10.13
백준 2738 행렬 덧셈  (1) 2024.10.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함