C언어/백준

2789번, 2231번

twoweeks-within 2024. 11. 23. 23:27

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