2789번
1. 3장의 카드가 중복되지 않아야함.
2)
----------------------------
ex) 5장 카드 1,2,3,4,5
1-2-3
1-2-4
1-2-5
1-3-4
1-3-5
1-4-5
2 ....
3 ....
---------------------------
나머지 두장 카드 때문에 첫번째 카드의 N-2 까지만
나머지 두장 카드 때문에 세번째 카드는 k+2 부터
for (int i = 0; i < N - 2; i++) {
for (int j = i + 1; j < N - 1; j++) {
for (int k = j + 1; k < N; k++) {
2231번
자릿수 값의 최대치는 9*6 ( ex) 999999 (9+9+9+9+9+9)
continue : 루프를 끝내는게 아니라 해당 조건만 pass 하므로
N =53 일때 i=-1 , 0, 1, 2, ,,, 10 > i=-1 을 건너뜀
for (int i = N - 9 * 6; i < N; i++) { // 최대 자릿수 6자리 고려
if (i <= 0) continue; // 0 이하일 수 없으므로
if (i + sum_of_digits(i) == N) { // 분해합이 N이 되는지 확인
min_constructor = i;
break;
}
}
216 = ( 198 + 1 + 9 + 8 )
i = 198 일때 sum_of_digits 의 return 값 : 1+9+8 =18
>> if (i + sum_of_digits(i) == N) 만족
>
int sum_of_digits(int num) {
int sum = 0;
while (num > 0) {
sum += num % 10; // 자릿수 더하기
num /= 10; // 한 자릿수 제거
}
return sum;
}
sum 에는 나머지 숫자 저장 // 분해합
num 에는 남은 값 저장
'C언어 > 백준' 카테고리의 다른 글
1018번 (0) | 2024.11.26 |
---|---|
FIFO 메모리관리 (0) | 2024.11.24 |
5073번, 14215번 (0) | 2024.11.21 |
2581번, 11653번, 1085번, 3009번 (0) | 2024.11.20 |
2869번, 5086번, 2501번, 9506번, 1978번 (0) | 2024.11.19 |