여니의 취준 준비/코딩테스트 (Python)

[n9742] 순열 in python

여니's 2021. 11. 8. 15:44


재귀함수 너무 어렵다 ㅠㅠ..

매번 풀어도 헷갈리고 적응 안되는 것들 중 하나가 재귀함수 :( 

 

너무 지저분하게 코드를 짠 것 같아서

좀 더 고민해보고 찾아봐야겠다 ㅠㅠ 

 

일단은 for문 안에서 1차적으로 첫번째 숫자를 고른 뒤

permu 함수를 실행한다.

 

permu 함수 내에서 for문을 또 따로 돌려주고

그 안에서 재귀함수를 호출하여

순열을 찾아나가면 된다.

 

만약 현재 값이 입력값과 개수가 똑같고

answer_num이 n과 같다면?

답을 찾은것이다!

 

answer_num = 0
answer = ''

def permu(n, cnt):
    global answer_num
    global answer
    if len(answer) == len(word):
        answer_num += 1
        if answer_num == n:
            return False

    for j in range(0, len(word)):
        if visited[j]:
            continue
        visited[j] = 1
        answer += word[j]
        permu(n, cnt + 1)
        if answer_num == n:
            return False
        visited[j] = 0
        answer = answer[:-1]
    return True

while True:
    try:
        word, n = input().split()
        n = int(n)
        cnt = 0
        if n == '':
            break
        visited = [0 for _ in range(len(word))]
        answer = ''
        answer_num = 0
        button = False

        for idx in range(0, len(word)):
            visited[idx] = 1
            answer = word[idx]
            if not permu(n, cnt + 1):
                print('{} {} = {}'.format(word, n, answer))
                button = True
                break
            visited[idx] = 0
        if not button:
            print('{} {} = No permutation'.format(word, n))

    except EOFError:
        break