백준 알고리즘/기본수학1

[JAVA 자바] 백준 2292번 : 벌집

Sun720 2022. 6. 10. 11:17

▶ 문제

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배 되는 것 같고 무엇보다도 실력이 은근히 올라가고 있다는 느낌이 들어 가장 좋았다.
그나저나 다시 수열 공부를 해봐야 하나 고민중이다. 규칙을 찾아내는 것 또한 수학적인 능력을 무시 못하기 때문이다. 

 

728x90
반응형