백준 2292번  www.acmicpc.net/problem/2292

 

 

 

풀이

 

몇 개의 방을 지나가냐는 출력하는 문제지만, 쉽게 말해 1에서 몇 번의 테두리를 지나서 도달할 수 있는가를 뜻한다.

즉, 우리가 여기서 알아야 할 것은 원하는 방이 몇 번째 테두리 인지 알면 된다.

주의점! 입력값이 1 이면 1번 지나는 것으로 한다.

 

그림에서

2 / 8 / 20 / 38 / 62 ...

숫자를 보면 한 줄이면서 새로 테두리를 만드는 시작점이 된다. 이 시작점이 아래 코드의 limit 가 된다.

처음 limit 의 시작은 2 인데 다음 시작점은 6이 증가하고 그 다음은 12, 18 이런식으로 증가한다. 등차수열을 이루고 있는 그 차가 6*n 값이라는 것을 알 수 있다.

 

즉, 우리가 원하는 방이 몇 번째 테두리인지 알기 위해서는 시작점(회색 숫자 참조) 어디와 어디 사이인지를 알면된다. limit 를 증가시기면서 a < limit 인 부분까지만 limit 를 증가시켜준다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int a = sc.nextInt();
        sc.nextLine();
        int i = 0;
        int limit = 2;
        
        if(a==1) i=1;
        else {
            while(a>=limit)    {
                limit += 6*i;  
                i++;
            }
        }    
        System.out.println(i);
                
        sc.close();
    }    
}
cs
댓글