입력 코드
#include <stdio.h>
main() {
int N, x = 0, y = 0, room;
scanf("%d", &N);
while (1) {
if (N <= 6 * x + 1) {
room = y + 1;
break;
}
y++;
x += y;
}
printf("%d", room);
}
코드 설명
#반복문 #수열 #규칙성 #수학
#include <stdio.h>
main() {
int N, n;
scanf("%d", &N);
int k, max, min;
for (k = 1; k < 578; k++) {
min = 3 * k*k - 3 * k + 2;
max = 3 * k*k + 3 * k + 1;
if (N >= min && N <= max)
n = k + 1;
}
printf("%d", n);
}
처음에는 계차수열을 이용해서 min값과 max값을 정한 다음에 시작과 끝을 포함하여 1을 더해주었는데 계속 틀렸다.
#include <stdio.h>
main() {
int N, x = 0, y = 0, room;
scanf("%d", &N);
while (1) {
if (N <= 6 * x + 1) {
room = y + 1;
break;
}
y++;
x += y;
}
printf("%d", room);
}
찾아보니까 마지막 수만을 이용해서 구하는 방법도 있고,
#include <stdio.h>
main() {
int n, i = 2, j = 5, cnt = 2;
scanf("%d", &n);
if (n == 1) {
printf("%d", 1);
return 0;
}
while (1) {
if (i <= n && i + j >= n) {
printf("%d", cnt);
break;
}
i = i + j + 1;
j += 6;
cnt++;
}
}
범위의 처음과 끝을 이용해서 그 사이에 있는 지 확인해서 구하는 방법도 있다.
↓↓↓ 참고한 사이트
dailycodingpractice.tistory.com/18
travelerfootprint.tistory.com/35
문제 출처
'C' 카테고리의 다른 글
#37. [백준_C언어] 2869 : 달팽이는 올라가고 싶다 (0) | 2021.01.19 |
---|---|
#36. [백준_C언어] 1193 : 분수찾기 (0) | 2021.01.18 |
#34. [백준_C언어] 1712 : 손익분기점 (0) | 2021.01.16 |
#33. [백준_C언어] 5622 : 다이얼 (0) | 2021.01.16 |
#32. [백준_C언어] 2908 : 상수 (0) | 2021.01.16 |