본문 바로가기
코딩테스트/Baekjoon

[백준/JAVA] 2292번: 벌집

by 희동츄루리 2023. 8. 16.
728x90

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

 

package baekjoon;

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	
    	int N = Integer.parseInt(br.readLine()); // 숫자 입력받기
    	int count = 1; // 방의 개수(최소 1)
    	int range = 2; // 2~7, 8~19, 20~37, 38~61
    	
    	if(N == 1) { // 입력받은 숫자가 1이면 방의 개수는 1로 출력
    		System.out.println(1);
    	}else {
    		while(range <= N) { // 범위가 입력받은 숫자 N보다 작거나 같을 동안 실행
    			range = range + (6*count);
    			// 2, 8(2+6*1), 20(2+8+6*2), 38(2+8+20+6*3), 61(2+8+20+38+6*4)...
    			count++; // 거쳐가는 방의 개수 +1
    		}
    		System.out.println(count);
    	}      
    }
}

 

  • 입력받은 숫자가 1 ⇒ 1 출력
  • 입력받은 숫자 N이 35라고 하자.
    • range ≤ 35 를 만족할 때까지 실행한다.
      1. 2 ≤ 35
        • range = 2, count = 1
        • range = 2 + 6*1 = 8
        • count = 2
      2. 8 ≤ 35
        • range = 8, count = 2
        • range = 8 + 6*2 = 20
        • count = 3
      3. 20 ≤ 35
        • range = 20, count = 3
        • range = 20 + 6*3 = 38
        • count = 4
      4. 38 ≤ 35 ⇒ 조건 불만족
    • count 출력