코딩 테스트/Baekjoon

S3 15649. N과 M (1)

  • -
728x90
반응형

문제 보기 :  15649번: N과 M (1)


문제

  • 정답률 : 63%


작성 코드

def per(n,new):
    global arr
    answer = []
    if len(new)==n:
        return [new]
    for i in range(len(arr)):
        if not visited[i]:
            visited[i]=True
            answer.extend(per(n,new+[arr[i]]))
            visited[i]=False
    return answer

n,m = map(int, input().split()) #1부터 n까지, m개
arr = [i for i in range(1,n+1)]
visited = [False]*n
k = per(m,[])

for i in k:
    print(*i, sep= ' ')

풀이

삼성 코딩 테스트는 itertools 사용이 안된다. 그래서 permutations, combinations 등등 순열과 조합을 모두 구현할 수 있어야하는데, 이 문제가 그 문제였다. 

하단에는 중복 순열, 조합, 중복 조합 코드도 추가해두겠다.

## 중복 순열

def product(n,new):
    global arr
    answer = []
    if len(new)==n:
        return [new]
    for i in range(len(arr)):
        answer.extend(product(n,new+[arr[i]]))
    return answer

## 조합

def combinations(n,new,c):
    answer = []
    if len(new)==n:
        return [new]
    for i in range(c,len(arr)):
        answer.extend(combinations(n,new+[arr[i]],i+1))
    return answer

## 중복 조합

def combinations(n,new,c):
    answer = []
    if len(new)==n:
        return [new]
    for i in range(c,len(arr)):
        answer.extend(combinations(n,new+[arr[i]],i+1))
    return answer

def combinations_with_replacements(n,new,c):
    answer = []
    if len(new)==n:
        return [new]
    for i in range(c,len(arr)):
        answer.extend(combinations(n,new+[arr[i]],i))
    return answer
320x100
728x90

'코딩 테스트 > Baekjoon' 카테고리의 다른 글

S3 15650. N과 M (2)  (0) 2024.11.02
S2 1874. 스택 수열  (0) 2024.10.30
G5 7576. 토마토  (0) 2024.10.30
S3 2606. 바이러스  (0) 2024.10.25
S3 1463. 1로 만들기  (0) 2024.10.25
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.