문제링크: https://www.acmicpc.net/problem/2292
13
3
수학적 사고를 이용한 문제였다.
벌집이 중앙에 있는 방에서 멀어질 때마다 갖게 되는 패턴을 분석하였다. 우선 i레벨(중앙에서 거쳐야하는 방의 수)의 방들은 중앙에서 i칸 멀어지면 6*(i-1) 칸의 방을 갖게 된다.
//벌집은 중앙에서 한 칸 멀어질수록 (멀어진 칸 수=i)*6개의 크기를 갖게 된다.
for(int j=1; j<=i*6; j++){
if(beeCount==N){
b = false;
break;
}
beeCount++;
}
이것은 2번 방부터 적용된다(1인 경우 중앙이기 때문에 방이 1개).
import java.io.BufferedReader;
import java.io.InputStreamReader;
//벌집
public class p2292 {
public static void main(String[] args)throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int beeCount = 2; //벌집 방 count, N과 비교
boolean b = true;
int i=1; //멀어진 칸 수
while (b){
//1인 경우는 항상 1칸
if(N==1){
break;
}
//벌집은 중앙에서 한 칸 멀어질수록 (멀어진 칸 수=i)*6개의 크기를 갖게 된다.
for(int j=1; j<=i*6; j++){
if(beeCount==N){
b = false;
break;
}
beeCount++;
}
i++;
}
System.out.println(i);
}
}
전에 풀어본 느낌의 문제였고 벌집에서 각 방들이 모두 육각형인 점을 고려해서 패턴을 찾으려고 노력했던 것 같다..! 재밌는 문제~!