Tesseractjh
한 걸음씩
Tesseractjh
전체 방문자
오늘
어제
  • 전체 (293)
    • IT (30)
      • JavaScript (7)
      • TypeScript (5)
      • React (5)
      • Next.js (3)
      • MongoDB (2)
      • Webpack (2)
      • HTML & CSS (1)
      • Git (0)
      • AWS (1)
      • 기타 (4)
    • 연습장 (259)
      • 백준(BOJ) 문제풀이 (185)
      • 프로그래머스 문제풀이 (61)
      • LeetCode 문제풀이 (2)
      • HackerRank 문제풀이 (7)
      • 낙서장 (3)
      • 기타 (1)
    • 프로젝트 (3)
      • 지뢰피하기 (1)
      • 키릴-라틴 문자 변환기 (1)
      • Flex & Grid (1)
    • 멋쟁이사자처럼 프론트엔드 스쿨 1기 (1)
      • 일기 & 회고록 (1)

인기 글

티스토리

hELLO · Designed By 정상우.
Tesseractjh

한 걸음씩

연습장/백준(BOJ) 문제풀이

[백준 15652] N과 M (4) with Python

2021. 5. 12. 15:20

문제 링크

www.acmicpc.net/problem/15652

 

15652번: N과 M (4)

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

www.acmicpc.net

풀이

n, m = map(int, input().split())

def nm(n, m, seq=[]):
    if len(seq) == m:
        print(" ".join(seq))
    else:
        start = int(seq[-1]) if seq else 1
        for i in range(start, n+1):
            nm(n, m, seq+[str(i)])

nm(n, m)

재귀함수를 통해 seq[-1]부터 n까지의 수를 순회하면서(처음에는 seq이 비어있으므로 seq[-1] 대신 1) seq에 하나씩 추가하면서 seq의 길이가 m이 될 때마다 수열을 출력하도록 하였다.

 

즉, 처음에는 1부터 n까지 순회하면서 seq에 숫자를 추가하고 그 다음부터는 seq의 가장 마지막 원소와 같거나 큰 수를 n까지 계속 순회하면서 재귀호출을 반복하는 것이다.

 

이 문제는 itertools 모듈의 combinations_with_replacement 메소드를 활용하여 쉽게 해결할 수 있다.

itertools.combinations_with_replacement(iterable, r)은 iterable의 원소를 반복 사용하여 r개를 고르는 조합을 튜플로 반환한다. 즉, itertools.combinations에서 중복을 허용한 것과 동일하다.

import itertools

n, m = map(int, input().split())
lst = [str(x) for x in range(1, n+1)]
print("\n".join(map(" ".join, itertools.combinations_with_replacement(lst, m))))

 

저작자표시 비영리 (새창열림)

'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글

[백준 1654] 랜선 자르기 with Python  (0) 2021.05.15
[백준 1302] 베스트셀러 with Node.js  (0) 2021.05.15
[백준 3986] 좋은 단어 with Node.js  (0) 2021.05.10
[백준 15651] N과 M (3) with Python  (0) 2021.05.10
[백준 9656] 돌 게임 2 with Node.js  (0) 2021.05.07
    '연습장/백준(BOJ) 문제풀이' 카테고리의 다른 글
    • [백준 1654] 랜선 자르기 with Python
    • [백준 1302] 베스트셀러 with Node.js
    • [백준 3986] 좋은 단어 with Node.js
    • [백준 15651] N과 M (3) with Python
    Tesseractjh
    Tesseractjh
    바닐라 자바스크립트를 좋아하는 개발자입니다

    티스토리툴바