해당 문제는 수열과 관련된 문제이다. 나는 수학을 정말 못하는구나를 다시금 느꼈다. 규칙을 찾아서 식을 만들기만 하면 되는데, 식을 세우는 데에 있어서 변수가 조금이라도 생기면 머리가 하얘진다..그래서 시간이 좀 걸렸다.
최소한으로 이동하는 경우를 = 1을 기준으로 감싸는 각 줄을 이동하는 경우. 따라서 각 줄마다 늘어나는 숫자에 대한 공식을 구현하면 된다.
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);
}
}
머리가 나쁜 바람에 초깃값 설정을 고려하여 식을 구현하는 데 있어서 시간을 많이 썼다..