[백준/백트래킹] 15649번: N과 M(1) (실버3, python)

2024. 1. 29. 11:34· Coding Test/Python
목차
  1. 아이디어
  2. 전체코드
  3. 제너레이터를 이용해서 구현

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

 

15649번: N과 M (1)

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

www.acmicpc.net

아이디어

순열을 구하는 문제였다. dfs로 모든 경우의 수를 탐색하면서, 백트래킹으로 겹치는 숫자를 만나지 않게 제외해주면 된다!

 

전체코드

N, M = map(int, input().split())

visited = [0] * (N + 1)

def bt(nums, visited):
    if len(nums) == M:
        for num in nums: 
            print(num, end=" ")
        print()
        return
    
    for idx in range(1, N + 1):
        if visited[idx] == 0:
            visited[idx] = 1
            bt(nums+[idx], visited)
            visited[idx] = 0
            
bt([], visited)

제너레이터를 이용해서 구현

처음에는 제너레이터로 편하게 구현했는데 N과 M 시리즈가 여러개라서.. 나중에 후회할까봐 정석 코드로 다시 짰다.

N, M = map(int, input().split())

def gen(prefix, nums, M):
    if len(prefix) == M:
        yield prefix
        return
    for idx, num in enumerate(nums):
        if num not in prefix:
            yield from gen(prefix+[num], nums[:idx]+nums[idx+1:], M)

answer = list(gen([], [x for x in range(1, N+1)], M))

for ans in answer:
    for a in ans:
        print(a, end=" ")
    print()

아래 제출한게 제너레이터로 작성한 코드이다. 시간이 70ms정도 짧아졌다!!~

'Coding Test > Python' 카테고리의 다른 글

[백준/백트래킹] 15651번: N과 M(3) (실버3, python)  (1) 2024.01.29
[백준/백트래킹] 15650번: N과 M(2) (실버3, python)  (0) 2024.01.29
[백준/dp] 2579번: 계단 오르기 (실버3, python)  (0) 2024.01.28
[백준/dp] 1904번: 01타일 (실버3, python)  (1) 2024.01.28
[프로그래머스] 큰 수 만들기 (level2, python)  (0) 2024.01.23
  1. 아이디어
  2. 전체코드
  3. 제너레이터를 이용해서 구현
'Coding Test/Python' 카테고리의 다른 글
  • [백준/백트래킹] 15651번: N과 M(3) (실버3, python)
  • [백준/백트래킹] 15650번: N과 M(2) (실버3, python)
  • [백준/dp] 2579번: 계단 오르기 (실버3, python)
  • [백준/dp] 1904번: 01타일 (실버3, python)
lim.dev
lim.dev
* 깃허브: https://github.com/Ellie010707
코딩림* 깃허브: https://github.com/Ellie010707
lim.dev
코딩림
lim.dev
전체
오늘
어제
  • 분류 전체보기 (205)
    • Network (6)
    • Backend (31)
      • Django (8)
      • Spring Boot (22)
    • Frontend (3)
    • Coding Test (107)
      • Python (93)
      • Java (1)
      • C_C#_C++ (4)
      • SQL (8)
    • Security (40)
      • 해커스쿨_FTZ (19)
      • VM (6)
      • CodeEngn (11)
      • Linux (4)
    • Project (2)
    • etc (12)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 리버서
  • ftz 풀이
  • ftz
  • 해킹
  • ftz write up
  • linux
  • 리눅스
  • hacking
  • 리눅스마스터
  • 리버싱
  • crackme
  • ftz writeup
  • 코드엔진
  • 해커스쿨ftz
  • reversing
  • abex
  • ftz풀이
  • stolenbyte
  • CodeEngn
  • 해커스쿨

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
lim.dev
[백준/백트래킹] 15649번: N과 M(1) (실버3, python)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.