[백준 - 2292번] 벌집 - 자바(JAVA) 정리 및 해설
안녕하세요. 오늘 풀어볼 문제는 벌집입니다.
벌집은 단순히 수학적 공식으로도 풀수 있는 문제이지만, (결국 그게 수학적인 규칙성을 찾아서 공식화 시킨거긴 하지만.) 그 공식 과정을 직접 일일히 대조하는 방식으로 진행했습니다.
저는 일단 인접한 방들을 기점삼아서 즉 2~7까지 인접해 있는 수들의 규칙성을 확인해보는 식으로 수를 만들어 갔습니다.
첫번째 1을 거쳐서 방을 지나가기때문에 다음 방은 2일것이니
N =2 2, 3, 4, 5, 6, 7
N=3 9, 11, 13, 15, 17, 19
N=4 22, 25, 28, 31, 34, 37
.....
계속 이런식으로 진행하게 될것입니다.
그 그림들로 보시면 N은 각 방을 지나서 갈수 있는 곳이고, 그 수에 있는 수들이 색깔별로 늘어나가는 숫자라고 생각하면 됩니다.
근데 이 N속에서도 또한 규칙이 존재합니다.
N=2: 2, 3, 4, 5, 6, 7 각 단위 넘어갈때마다 +1 맨 끝자리 수 +2은 N=3 첫번째 수
N=3: 9, 11, 13, 15, 17, 19 각 단위 넘어갈때마다 +2 맨 끝자리 수 +3은 N=4 첫번째 수
N=4: 22, 25, 28, 31, 34, 37 각 단위 넘어갈때마다 +3 맨 끝자리 수 +4 은 N=5 첫번째 수
.......
즉, 각 단위 넘어갈때마다 +N-1 맨 끝자리 수 +N은 N의 N+1의 첫번째 수 방식으로 진행됩니다.
대신 유의점 하나. 회색으로 칠해지는 부분은 무조건 방 한칸이 늘어나니까 방한칸 셈치고 생각해줘야합니다.
저는 그래서 이런 것을 감안해서 완전히 다 계산해보는 것도 괜찮다고 생각했습니다.
아예 이런 규칙성을 이용해서 이중배열을 통해서 N값에 따라서 그 수의 방 위치를 어느정도 알수 있다고 생각했습니다.
그래서 이 수를 입력해서 N의 범위를 조금 넘는 선에서 N을 작성만들어서 for문을 이 이중배열을 채워가면서 N보다 큰지 확인을 합니다.
N보다 이 수가 크다면, 그때의 [n]을 기록해서 출력해냅니다.
/* 2019.03.06 브루트포스로 때려맞춰보기.
* 이중 for문 탈출시 label 이용하는 전략은 상당히 유용한듯.
*
*/
package codeBaekJoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class No2292_honeycombs {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
int check[][] = new int [25003][6];
Arrays.fill(check[1], 1);
int ni =0;
check[2][0] =2;
outloop:
for(int i = 2; i<25002; i++){
for(int j =1; j<6; j++){
check[i][j] = check[i][j-1]+i-1;
if(check[i][j]>=T){
ni=i;
break outloop;
}
}
check[i+1][0]=check[i][5]+i;
if(check[i+1][0]>T){
ni=i+1;
break outloop;
}
}
if(T!=1){
System.out.println(ni);
}
else{
System.out.println(1);
}
}
}
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 - 1912번] 연속합- JAVA 정리 및 해설 (0) | 2019.07.13 |
---|---|
[백준 - 2579번] 계단오르기 - 자바(JAVA) 정리 및 해설 (3) | 2019.03.13 |
[백준 - 3055번] 탈출 - 자바(JAVA) 정리 및 해설 (0) | 2019.02.17 |
[백준 - 7576번] 토마토 - 자바(JAVA) 정리 및 해설 (0) | 2019.02.08 |
[백준 - 9461번] 파도반 수열 - JAVA 정리 및 해설 (0) | 2019.02.08 |