▶ 문제
https://www.acmicpc.net/problem/2292
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
▶ 설명
문제를 처음 보고 당황했다. 공책에 그려가면서 무슨그림인가 봤는데 자세히보니 생각보다 단순한 구조로 되어 있었다.
13까지는 1, 4, 13 번 방을 거쳐야 하고, 58까지는 1, 6, 17, 34, 58번 방을 거치는 것을 알 수 있는데,
몇번 방 부터 몇 번 방까지는 동일한 개수의 방을 거치기 때문의 다음의 규칙을 찾을 수 있었다.
2 ~ 7번 (6개) : 2개 방을 거침
8 ~ 19번 (12개) : 3개 방을 거침
20 ~ 37번 (18개) : 4개 방을 거침
38 ~ 61번 (24개) : 5개 방을 거침
1, 2~7, 8~19, 20~37 의 범위 안에서 지나가는 방의 개수가 하나씩 늘어난 다는 규칙을 알게 되었고,
37의 경우 (1+(6*1)+(6*2)+(6*3)) = 37 가 성립이 되는데 최종적으로 곱해지는 수 3이 문제의 답이 라는 것을 결론 짓고 이것을 식으로 만들어 코드화 해보았다.
▶ 문제 풀이
🌱 풀이1.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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 = 0;
if (n == 1) {
count = 1;
} else {
while (n > 1) {
n = n - (6 * count);
count++;
}
}
System.out.print(count);
}
}
▶ Log
(푸념)
처음엔 수열 규칙을 찾지 못해서 포기하고 다른 사람의 코드를 보고 이해해볼까 했는데 오히려 익숙한 메소드와 작은 숫자들로 이루어진 연산 식이 더 이해가 가지 않았다.정답과 닿을 듯 말 듯한 게 내가 풀 수 있을 것 같아서 결국 내 방식대로 차근히 시간이 걸리더라도 풀어보자 마음을 먹었다.
평소에도 느꼈던 거지만 내가 내 방식대로 체화하지 않으면 남의 코드는 결국 남의 것으로 남고 이 문제는 내 기억속의 뒤안길로 졌을 것이란 사실이 새삼 크게 와닿았다. 포기하지 않고 내 머릿속에서 내 방식대로 만들어 보려고 하니 단순한 문제였더라도 풀어냈을 때 쾌감이 10배 되는 것 같고 무엇보다도 실력이 은근히 올라가고 있다는 느낌이 들어 가장 좋았다.
그나저나 다시 수열 공부를 해봐야 하나 고민중이다. 규칙을 찾아내는 것 또한 수학적인 능력을 무시 못하기 때문이다.
'백준 알고리즘 > 기본수학1' 카테고리의 다른 글
[JAVA 자바] 백준 2775번 : 부녀회장이 될테야 (0) | 2022.06.12 |
---|---|
[JAVA 자바] 백준 10250번 : ACM 호텔 (0) | 2022.06.11 |
[JAVA 자바] 백준 2869번 : 달팽이는 올라가고 싶다 (0) | 2022.06.11 |
[JAVA 자바] 백준 1193번 : 분수찾기 (0) | 2022.06.11 |
[JAVA 자바] 백준 1712번 : 손익분기점 (0) | 2022.06.10 |