본문 바로가기

[BAEKJOON] 2292번



처음에는 벌집을 구현해야 되는 건가 싶었는데, 규칙이 있었다.


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
32
33
34
35
36
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        System.out.print(new Main().run());
    }
    
    public String run() {
        Scanner scanner = new Scanner(System.in);
        long n = scanner.nextLong();
        int count = 1;
        
        if(n == 1L) {
            scanner.close();
            
            return "1";
        }
        
        for(long na = 0L, nb = 1L, a = 0L, b = 1L; ; na += a, nb += b) {
            count++;
            
            if((6*na + 2 <= n) && (n <= 6*nb + 1)) {
                break;
            }
            a++;
            b++;
            
        }
        
        scanner.close();
        
        return Integer.toString(count);
    }
 
}
cs


육각형의 방들이 모여 다시 육각형을 이루고 있다.


따라서 통과해야 하는 방의 수는 6의 배수를 주기로 늘어난다.


목적지의 방 번호 

과해야 하는 방의 수

1

1

2 ~ 7

2

8 ~ 19

3

20 ~ 37

4

38 ~ 61

5



이 방 번호들은 다음과 같이 쓸 수 있다.


목적지의 방 번호

통과해야 하는 방의 수

1

1

6×0 + 2 ~ 6×1 + 1

2

6×1 + 2 ~ 6×3 + 1

3

6×3 + 2 ~ 6×6 + 1

4

6×6 + 2 ~ 6×10 + 1

5


0, 1, 3, 6, 은  na 로 표현했고 1, 3, 6, 10, 은  nb 로 표현했다.

 na 는 공차가 1, 2, 3, 인 계차수열이고  nb 는 공차가 2, 3, 4, 인 계차수열이다.

따라서 더해지는 값( a 와  b )은 1씩 늘어난다.












'Programming > Solutions' 카테고리의 다른 글

[BAEKJOON] 1152번  (0) 2019.03.25
[BAEKJOON] 2775번  (0) 2019.03.25
[BAEKJOON] 1924번  (0) 2019.03.24
[Project Euler] Problem 007  (0) 2019.03.24
[Project Euler] Problem 006  (0) 2019.03.24