ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€(BOJ)] 2798번 λΈ”λž™μž­, Cμ–Έμ–΄ 풀이
    PS(Problem Solving)/C 2020. 7. 26. 22:28
    λ°˜μ‘ν˜•

    <λΈ”λž™μž­>, 2798번

     

    문제

    μΉ΄μ§€λ…Έμ—μ„œ 제일 인기 μžˆλŠ” κ²Œμž„ λΈ”λž™μž­μ˜ κ·œμΉ™μ€ μƒλ‹Ήνžˆ 쉽닀. μΉ΄λ“œμ˜ 합이 21을 λ„˜μ§€ μ•ŠλŠ” ν•œλ„ λ‚΄μ—μ„œ, μΉ΄λ“œμ˜ 합을 μ΅œλŒ€ν•œ 크게 λ§Œλ“œλŠ” κ²Œμž„μ΄λ‹€. λΈ”λž™μž­μ€ μΉ΄μ§€λ…Έλ§ˆλ‹€ λ‹€μ–‘ν•œ κ·œμ •μ΄ μžˆλ‹€.

    ν•œκ΅­ 졜고의 λΈ”λž™μž­ 고수 김정인은 μƒˆλ‘œμš΄ λΈ”λž™μž­ κ·œμΉ™μ„ λ§Œλ“€μ–΄ 상근, μ°½μ˜μ΄μ™€ κ²Œμž„ν•˜λ €κ³  ν•œλ‹€.

    김정인 λ²„μ „μ˜ λΈ”λž™μž­μ—μ„œ 각 μΉ΄λ“œμ—λŠ” μ–‘μ˜ μ •μˆ˜κ°€ μ“°μ—¬ μžˆλ‹€. κ·Έ λ‹€μŒ, λ”œλŸ¬λŠ” Nμž₯의 μΉ΄λ“œλ₯Ό λͺ¨λ‘ μˆ«μžκ°€ 보이도둝 λ°”λ‹₯에 λ†“λŠ”λ‹€. 그런 후에 λ”œλŸ¬λŠ” 숫자 M을 크게 μ™ΈμΉœλ‹€.

    이제 ν”Œλ ˆμ΄μ–΄λŠ” μ œν•œλœ μ‹œκ°„ μ•ˆμ— Nμž₯의 μΉ΄λ“œ μ€‘μ—μ„œ 3μž₯의 μΉ΄λ“œλ₯Ό 골라야 ν•œλ‹€. λΈ”λž™μž­ λ³€ν˜• κ²Œμž„μ΄κΈ° λ•Œλ¬Έμ—, ν”Œλ ˆμ΄μ–΄κ°€ κ³ λ₯Έ μΉ΄λ“œμ˜ 합은 M을 λ„˜μ§€ μ•ŠμœΌλ©΄μ„œ Mκ³Ό μ΅œλŒ€ν•œ κ°€κΉκ²Œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

    Nμž₯의 μΉ΄λ“œμ— 써져 μžˆλŠ” μˆ«μžκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, M을 λ„˜μ§€ μ•ŠμœΌλ©΄μ„œ M에 μ΅œλŒ€ν•œ κ°€κΉŒμš΄ μΉ΄λ“œ 3μž₯의 합을 ꡬ해 좜λ ₯ν•˜μ‹œμ˜€.

     

    μž…λ ₯

    첫째 쀄에 μΉ΄λ“œμ˜ 개수 N(3 ≤ N ≤ 100)κ³Ό M(10 ≤ M ≤ 300,000)이 주어진닀. λ‘˜μ§Έ μ€„μ—λŠ” μΉ΄λ“œμ— μ“°μ—¬ μžˆλŠ” μˆ˜κ°€ 주어지며, 이 값은 100,000을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

    합이 M을 λ„˜μ§€ μ•ŠλŠ” μΉ΄λ“œ 3μž₯을 찾을 수 μžˆλŠ” 경우만 μž…λ ₯으둜 주어진닀.

     

    좜λ ₯

    첫째 쀄에 M을 λ„˜μ§€ μ•ŠμœΌλ©΄μ„œ M에 μ΅œλŒ€ν•œ κ°€κΉŒμš΄ μΉ΄λ“œ 3μž₯의 합을 좜λ ₯ν•œλ‹€.

     

    예제 μž…λ ₯ 1 λ³΅μ‚¬

    5 215 6 7 8 9

    예제 좜λ ₯ 1 λ³΅μ‚¬

    21

    예제 μž…λ ₯ 2 λ³΅μ‚¬

    10 50093 181 245 214 315 36 185 138 216 295

    예제 좜λ ₯ 2 λ³΅μ‚¬

    497

     

    풀이

    이 λ¬Έμ œλŠ” Nμž₯의 μΉ΄λ“œμ™€ 3μž₯의 μΉ΄λ“œμ˜ 수의 ν•©μ˜ ν•œλ„μΈ M을 μž…λ ₯ν•œ ν›„ M에 κ°€μž₯ κ·Όμ ‘ν•œ μΉ΄λ“œμ˜ 수 3개의 합을 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ œμž‘ν•˜λŠ” 것이닀. λ‚˜λŠ” λ°°μ—΄ arr에 Nμž₯의 μΉ΄λ“œμ˜ 수λ₯Ό μž…λ ₯ν•œ 후에 λ°˜λ³΅λ¬Έμ„ μ΄μš©ν•΄μ„œ λ³€μˆ˜ sum에 3μž₯의 합을 μ €μž₯ν•΄ if문을 μ‚¬μš©ν•΄μ„œ 값이 μ΄μ „κΉŒμ§€ κ³„μ‚°ν–ˆλ˜ max보닀 크고 주어진 M보닀 μž‘κ±°λ‚˜ 같을 λ•Œ κ·Έ 값을 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ—ˆλ‹€.

     

    #include <stdio.h>
    
    int main(void)
    {
        int N, M;
        int num;
        int arr[100];
        int max = 0;
        int sum = 0;
    
        scanf_s("%d %d", &N, &M);
        
        for (int i = 0; i < N; i++)
            scanf("%d", &arr[i]);
    
        max = arr[0];
    
        for(int i=0;i<N;i++)
            for(int j=i+1;j<N;j++)
                for (int k = j + 1; k < N; k++)
                {
                    sum = arr[i] + arr[j] + arr[k];
                    if (sum <= M && sum > max)
                        max = sum;
                }
    
        printf("%d", max);
    
        return 0;
    }
    λ°˜μ‘ν˜•
Designed by Tistory.