파이썬 알고리즘

재귀로 순열 풀어보기

뜻 지, 깨달음 오 2022. 10. 31. 22:01

 

4개 카드 중 3개 뽑기 (순서 O)

n=int(input())
path=['']*n # 최대 레벨 까지 size 맞추면 오케이
dice=[1,2,3,4]
used=[0]*6  # br의 개수 만큼 만들기

def abc(level):
    if level==n:
        for i in range(level):
            print(path[i],end=' ')
        print()
        return

    for i in range(6):

        #if used[i]==0:
        if used[i] == 1: continue
        path[level]=dice[i]
        used[i] =1
        abc(level+1)
        used[i] = 0
        #path[level]=0

abc(0)

 

요소

• ABCD 중에 C로 시작하는 경우는 다 제외하고 출력하기

candidates = ['A','B','C','D'] #후보
n = 3 #내가 뽑을 사람 수
picked = ['']*3
used = [0]*4

def recur(k):

    if k==3:
        print(picked)
        return

    for i in range(4):
        if used[i]==0:
            if k==0 and candidates[i]=='C':
                continue
            picked[k] = candidates[i]
            used[i]=1
            recur(k+1)
            used[i]=0

 

• ABCD 중에 B는 모든 경우에서 제외 !!

candidates=['A','B','C','D']
path=['']*10

def abc(level):
    if level>0 and path[level-1]=='B': return
    if level==3:
        for i in range(level):
            print(path[i],end=' ')
        print()
        return
    for i in range(4):
        #if i==1: continue
        path[level]=candidates[i]
        abc(level+1)

abc(0)

 

• ABCD 중에 연속해서 2장의 카드가 나오면 안되는 경우!!

candidates=['A','B','C','D']
path=['']*10

def abc(level):
    if level>1 and path[level-1]==path[level-2]: return
    if level==3:
        for i in range(level):
            print(path[i],end=' ')
        print()
        return
    for i in range(4):
        if level>0 and (path[level-1]==candidates[i]):continue
        path[level]=candidates[i]
        abc(level+1)

abc(0)

 

• 누적합 복습 (호출하며 출력하기 (전역변수 sum)

arr=[4,7,1,8]
sum=arr[0]

def abc(level):
    global sum
    #print(sum,end=' ')
    if level==3:
        print(sum, end=' ')
        return
    print(sum,end=' ')
    sum+=arr[level+1]
    abc(level+1)

abc(0)

• 누적합 복습 ( 리턴되며 출력하기 (전역변수sum))

arr=[4,7,1,8]
sum=arr[0]

def abc(level):
    global sum

    if level==3:
        print(sum,end=' ')
        return

    sum+=arr[level+1]
    abc(level+1)
    sum-=arr[level+1]
    print(sum,end=' ')

abc(0)

 

• 누적합 복습 (리턴하며 출력하기 (매개변수 sum))

arr=[4,7,1,8]

def abc(level,sum):

  if level==3:
      print(sum,end=' ')
      return

  abc(level+1,sum+arr[level+1])
  print(sum, end=' ')

abc(0,arr[0])