처음에는 벌집을 구현해야 되는 건가 싶었는데, 규칙이 있었다.
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 |