◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이

[백준 / BOJ] 15651번 N과 M (3) (C++, Python)

Reo 2022. 7. 27. 22:31
반응형

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

 

15651번: N과 M (3)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net


문제


문제 풀이

앞선 문제들(N과 M (1), N과 M (2))와 같은 맥락을 공유하는 문제다.

 

이번 문제는 같은 수를 여러 번 골라도 된다는 조건이 붙어있다. 그래서 굳이 visited를 사용할 필요 없이, 그냥 dfs를 통해서만 해결하면 된다. (자세한 풀이는 N과 M (1) 문제를 참고해주세요.)

 

for (int i = 1; i <= N; i++) {
    v[val] = i;
    dfs(v, N, M, val + 1);
}

C++ 코드다. 해당 for문에서, 중복이 허용되므로 vector에 i를 저장한 후 dfs를 호출할 시 val 값을 한번 더 증가시켜준 값으로 넣어준다면 자연스레 v[val] = i에 순서대로 값이 넣어진다.

 

for i in range(1, N + 1):
    res.append(i)
    dfs(res, N, M, val + 1)
    res.pop()

파이썬 코드다. 마찬가지로 val 인자만 +1 해주므로 중복을 허용하면서 뽑게 된다.

 

 

C++ 코드 전문

 

Python 코드 전문

 

소감

 

반응형