[BaekJoon/백준] 2292번

Hevton·2020년 9월 8일
0
post-custom-banner

해당 문제는 수열과 관련된 문제이다. 나는 수학을 정말 못하는구나를 다시금 느꼈다. 규칙을 찾아서 식을 만들기만 하면 되는데, 식을 세우는 데에 있어서 변수가 조금이라도 생기면 머리가 하얘진다..그래서 시간이 좀 걸렸다.

최소한으로 이동하는 경우를 = 1을 기준으로 감싸는 각 줄을 이동하는 경우. 따라서 각 줄마다 늘어나는 숫자에 대한 공식을 구현하면 된다.

  1. 벌집에서 1을 기준으로 바깥을 감싸는 줄의 숫자의 갯수를 구한다.
    첫째줄(=1 자신)은 1개, 둘째 줄은 6개, 셋째 줄은 12개... 그리고 식으로 도출해보면,
    -> 6(n-1) (n>1, n=1일땐 1) 이라는 식이 나온다.
  2. 위 식을 참고하여 이번엔 각 줄까지 포함되는 수를 구한다. (n = x일때 몇 까지의 수가 벌집을 감싸는지)
n = 1 -> 1+0 //6(1-1)=0
n = 2 -> 1+6(2-1)
n = 3 -> 1+6(2-1)+6(3-1)
n = 4 -> 1+6(2-1)+6(3-1)+6(4-1)

아까 1번 규칙 6(n-1)에서 n에 1을 넣어주게 되면 어차피 0이 나오므로,
2번 규칙에서는 n=1일때에도 규칙을 통일할 겸 6(n-1)을 넣어주면 좋다.
즉 벌집안의 k번째 줄까지는 1 + 6(n-1) + 6(n) + .... + 6(k-2) + 6(k-1) 까지의 숫자가 있다.(k>0) 이를 이용해서 코딩을 하면 된다.

import java.util.Scanner;

public class exam {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        int total = 1, counter = 1;

        while (true) {
            total += 6 * (counter - 1);
            if (total >= N)
                break;
            else
                counter++;
        }
        System.out.print(counter);
    }
}

머리가 나쁜 바람에 초깃값 설정을 고려하여 식을 구현하는 데 있어서 시간을 많이 썼다..

profile
놀만큼 놀았다.
post-custom-banner

0개의 댓글