본문 바로가기
프로그래밍/백준 알고리즘 코드

백준 2292번 java 자바 벌집 [수학1]

by 졸린이 2020. 10. 25.
반응형

1부터 70까지 벌집 모양의 방이 있다.

1부터 시작해서 1씩 증가하면서 빙글빙글 6각형의 변에 방이 추가 된다.

입력값의 방까지 가는데 드는 비용을 요구하는 프로그램이다. 2~7은 1에 닿아있어서 자신을 포함해서 2개 방을 거친다.

8~19는 2~7을 감싸고 있어서 3의 비용이 든다. 이를 이용해서 풀면 된다.

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
import java.util.Scanner;
/*
 * 1 //1 
 * 2~7  //2 6
 * 8~19 //3 12
 * 20~37 //4 18
 * 38~61 //5 24
 * 62~70 //6 
 */
//baekjoon_2292_벌집
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int input = sc.nextInt();
        
        int range=1//처음에 1
        int cnt=1;
        int tmp=1;
        
        while(true) {
            if(range>= input) {
                break;
            }
            tmp = 6 * (cnt++); //tmp 6 tmp 12 tmp 18 24 30
            range += tmp; //렌 현 7 19 37 61 91
        }                     //2 3 4 5 6
        System.out.println(cnt);
    }
}
cs

/*

 * 1 //1 

 * 2~7  //2 6

 * 8~19 //3 12

 * 20~37 //4 18

 * 38~61 //5 24

 * 62~70 //6 

 */

1이 입력값으로 들어오면 출력도 그냥 1이다.

2~7이 1을 감싸고 있으므로 카운트는 2이고 2,3,4,5,6,7 6개의 방이 감싸고 있다.

2의 카운트를 세는 방의 범위는 2~7인 6이다.

2~7을 감싸는 방은 8~19내 이며 범위는 12 이다.

그 다음은 18 즉 6의 배수로 범위가 올라간다.

line 16 : 처음 출발인 1을 포함시키므로 range를 1로 잡는다. 범위에 따라 비용을 계산할 것이다.

line 17 : 방을 몇 개 거치는지 카운트할 변수.

line 18 : 입력값까지 도달할 때 까지 어느 범위에 속하는지 더해준다.

line 20, 21 : while문으로 루프를 돌리고 range가 input 보다 같거나 커지면 반복을 멈추고 빠져나간다.

입력값이 해당하는 범위 내로 들어간 것이다.

line 24 : 범위를 더할 것이다. cnt에 6을 곱하고 (처음에는 6..그다음 12..18) tmp에 넣는다. 그 후 cnt를 1 올려준다.

line 25 : tmp는 6이며 range (1)에 더해 range는 7이 된다. 카운트는 1올렸기에 2가 되었다.

만약 입력값이 2~7사이이면 break 조건문에 걸려서 while문을 빠져나가고 cnt(2)를 출력시키면 끝난다.

입력값이 8~19 사이면 다시 while문에 들어가서 cnt(2)에 6을 곱해 (12) 를 tmp에 넣고 range에 더한다.

range는 7+12 = 19가 되어 8~19가 입력값이면 break문에 걸려 빠져나가서 cnt(3)을 출력하고 종료시킨다.

 

입력값의 cnt가 몇이 될지 cnt를 계속 올리고 range 범위 값을 범위 그룹내에서 가장 큰 값까지 올려 비교 시키고 input보다 크면 종료시키는 것이다.

 

뭐 더 간단한 방법도 있겠지..?

 

반응형

댓글