코드는 짧지만 규칙을 찾는게 당황스러웠다.
어떤 방식인지 잘 모르겠어서 결국 검색해보고 풀었다.
규칙을 찾는 것에 좀 더 익숙해질 필요가 있는 것 같다.
# 풀이
규칙을 찾으려면 숫자를 기준으로 보는 것이 가장 좋은 것 같다.
최소한의 방 개수를 기준으로 번호를 나열해보면 아래와 같다.
방 개수 | 번호개수 | 번호 |
---|---|---|
1 | 1 | 1 |
2 | 6 | 2 3 4 5 6 7 |
3 | 12 | 8 9 10 11 12 13 14 15 16 17 18 19 |
4 | 18 | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
... | ... | ... |
이렇게 번호의 개수가 6의 배수만큼 늘어나는 것을 알 수 있다.
하지만 방의 개수를 알기 위해서는 끝자리 번호를 알아야하기 때문에, 끝자리를 구하기 위해 공식을 구해봤다.
6*0 + 1
6*1 + 1
6*3 + 1
6*6 + 1
6*10 + 1
순으로 늘어나는 것을 확인할 수 있다.
1, 3, 6, 10 , 15 ... 의 수열은 n*(n+1)/2
로 구할 수 있으므로 끝 번호의 공식은 6*n(n+1)/2 + 1
이다.
따라서 아래 코드와 같이 입력받은 수보다 끝 번호가 커지면 반복문이 멈추도록 하였으며, 그 때의 방의 개수는 nCnt + 1
이므로 이를 출력했다.
# 코드
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int nNum = sc.nextInt();
int nCnt = 0;
while(true) {
if(((3*nCnt*nCnt) + (3*nCnt) + 1) >= nNum) {
System.out.println(nCnt + 1);
break;
}
nCnt++;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19