1ν•™λ…„ (2023)/C μ–Έμ–΄

[C] λ°±μ€€/BAEKJOON 15651번: Nκ³Ό M (3)

waterproof 2023. 11. 22. 00:08

 

 

 https://www.acmicpc.net/problem/15651

 

15651번: N과 M (3)

ν•œ 쀄에 ν•˜λ‚˜μ”© 문제의 쑰건을 λ§Œμ‘±ν•˜λŠ” μˆ˜μ—΄μ„ 좜λ ₯ν•œλ‹€. μ€‘λ³΅λ˜λŠ” μˆ˜μ—΄μ„ μ—¬λŸ¬ 번 좜λ ₯ν•˜λ©΄ μ•ˆλ˜λ©°, 각 μˆ˜μ—΄μ€ 곡백으둜 κ΅¬λΆ„ν•΄μ„œ 좜λ ₯ν•΄μ•Ό ν•œλ‹€. μˆ˜μ—΄μ€ 사전 순으둜 μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ 좜λ ₯ν•΄

www.acmicpc.net


[1] 문제

 

문제

μžμ—°μˆ˜ Nκ³Ό M이 μ£Όμ–΄μ‘Œμ„ λ•Œ, μ•„λž˜ 쑰건을 λ§Œμ‘±ν•˜λŠ” 길이가 M인 μˆ˜μ—΄μ„ λͺ¨λ‘ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

  • 1λΆ€ν„° NκΉŒμ§€ μžμ—°μˆ˜ μ€‘μ—μ„œ M개λ₯Ό κ³ λ₯Έ μˆ˜μ—΄
  • 같은 수λ₯Ό μ—¬λŸ¬ 번 골라도 λœλ‹€.

 

μž…λ ₯

첫째 쀄에 μžμ—°μˆ˜ Nκ³Ό M이 주어진닀. (1 ≤ M ≤ N ≤ 7)

 

좜λ ₯

ν•œ 쀄에 ν•˜λ‚˜μ”© 문제의 쑰건을 λ§Œμ‘±ν•˜λŠ” μˆ˜μ—΄μ„ 좜λ ₯ν•œλ‹€. μ€‘λ³΅λ˜λŠ” μˆ˜μ—΄μ„ μ—¬λŸ¬ 번 좜λ ₯ν•˜λ©΄ μ•ˆλ˜λ©°, 각 μˆ˜μ—΄μ€ 곡백으둜 κ΅¬λΆ„ν•΄μ„œ 좜λ ₯ν•΄μ•Ό ν•œλ‹€.

μˆ˜μ—΄μ€ 사전 순으둜 μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ 좜λ ₯ν•΄μ•Ό ν•œλ‹€.

 

예제 μž…λ ₯ 1 

3 1

예제 좜λ ₯ 1

1
2
3

예제 μž…λ ₯ 2

4 2

예제 좜λ ₯ 2

1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
4 1
4 2
4 3
4 4

예제 μž…λ ₯ 3

3 3

예제 좜λ ₯ 3

1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
2 3 1
2 3 2
2 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3

[2] μ •λ‹΅ 및 ν•΄μ„€

 

 

# μ •λ‹΅ μ½”λ“œ

 

#include <stdio.h>

int main() {
    int N, M;
    scanf("%d %d", &N, &M);

    int sequence[7];

    for (int i = 0; i < M; i++) {
        sequence[i] = 1;
    }

    while (1) {
        for (int i = 0; i < M; i++) {
            printf("%d ", sequence[i]);
        }
        printf("\n");

        int index = M - 1;
        while (index >= 0 && sequence[index] == N) {
            index--;
        }

        if (index < 0) {
            break;
        }

        sequence[index]++;
        for (int i = index + 1; i < M; i++) {
            sequence[i] = 1;
        }
    }

    return 0;
}

 

 

 

 

# ν•΄μ„€

 

⭐⭐⭐⭐⭐

1) while (1) {: λ¬΄ν•œ 루프 μ‹œμž‘.

2) for (int i = 0; i < M; i++) { printf("%d ", sequence[i]); }: ν˜„μž¬ μˆ˜μ—΄μ„ 좜λ ₯ν•œλ‹€.

3) printf("\n");: ν˜„μž¬ μˆ˜μ—΄ 좜λ ₯ ν›„ κ°œν–‰ν•˜μ—¬ λ‹€μŒ μˆ˜μ—΄μ„ 좜λ ₯ μ€€λΉ„ν•œλ‹€.

4) int index = M - 1; while (index >= 0 && sequence[index] == N) { index--; }: λ‹€μŒ μˆ˜μ—΄μ„ μƒμ„±ν•˜κΈ° μœ„ν•΄ ν˜„μž¬ μˆ˜μ—΄μ˜ κ°€μž₯ 끝 μžλ¦¬λΆ€ν„° μ‹œμž‘ν•˜μ—¬ N보닀 μž‘μ€ 값이 λ‚˜μ˜€λŠ” μœ„μΉ˜λ₯Ό μ°ΎλŠ”λ‹€.

5) if (index < 0) { break; }: λ§Œμ•½ λͺ¨λ“  μžλ¦¬κ°€ N으둜 μ±„μ›Œμ Έ 있으면 루프λ₯Ό μ’…λ£Œν•œλ‹€.

6) sequence[index]++;: λ‹€μŒ 자리의 수λ₯Ό μ¦κ°€μ‹œν‚¨λ‹€.

7) for (int i = index + 1; i < M; i++) { sequence[i] = 1; }: λ‹€μŒ μžλ¦¬λΆ€ν„° λκΉŒμ§€μ˜ 수λ₯Ό 1둜 μ΄ˆκΈ°ν™”ν•œλ‹€.

 

 


[3] λŠλ‚€ 점

 

쀑볡을 ν—ˆμš©ν•˜κ³  사전 순으둜 μ •λ ¬λœ μˆœμ„œλ‘œ 좜λ ₯ν•΄μ•Ό ν•˜λŠ” 뢀뢄이 λ³΅μž‘ν•˜κ²Œ λŠκ»΄μ‘Œλ‹€. πŸ₯²