알고리즘
최소로 거치는 벌집 개수 구하기
_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();
}
}