처음부터 차근차근

최소로 거치는 벌집 개수 구하기 본문

알고리즘

최소로 거치는 벌집 개수 구하기

_soyoung 2022. 10. 22. 15:46
반응형

문제

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

문제 이미지만 보면 엄청 복잡할 것같고, 풀기 싫어지는데 조금만 생각해보면 쉽게 풀 수 있는 문제였다.

 

내 풀이

이런 류의 문제들은 제일 먼저 규칙성을 찾아야한다.

1에서 부터 차례대로 주변 벌집이 확장되는데 각 개수가 6의 배수만큼 늘어나는 걸 알 수 있다.

그래서 어느 구간에 있는지만 알면 최소로 거칠 수 있는 벌집의 개수를 쉽게 구할 수 있다.

나는 if문의 구간을 6의 배수만큼 차례대로 늘려가며 구간을 찾아 어느 구간인지 출력하는 방식으로 풀었다. 

import java.io.*;
public class Main
{
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int input = Integer.parseInt(br.readLine());
		
		if (input == 1) {
            bw.write("1");
		}
		else { 
		    int i = 0;
		    int first = 1;
    		while (true) {
    		    first += (6 * i);
    		    if (input > first && input <= first + (6 * (i + 1))) {
    		        bw.write(String.valueOf(i + 2));
    		        break;
    		    }
    		    i++;
    		}
		}
		
		bw.close();
		br.close();
	}
}
반응형

'알고리즘' 카테고리의 다른 글

acm 호텔 문제  (0) 2022.12.25
달팽이는 올라가고 싶다 - 문제풀이(수정 중)  (0) 2022.10.23
이친수 구하기 - 동적계획법  (2) 2022.10.14
그리디 알고리즘  (0) 2022.10.13
DFS, BFS 알고리즘  (0) 2022.10.10
Comments