[프로그래머스][python]타겟넘버_중복순열 직접 구현해보기

최혜원·2022년 8월 19일
0

관련 문제

https://school.programmers.co.kr/learn/courses/30/lessons/43165?language=python3

중복순열, 조합, 중복조합을 직접 구현해보자

  • 각각의 개념 간단 정리

순열

  • 순서 유의미
  • 1~10 까지 숫자가 있다면 이 중에 3개를 순서를 신경쓰며 뽑는것
  • 10, 3, 2 와 10, 2, 3 은 다르게 여김

조합

  • 순서 무의미
  • 진짜 그냥 뽑는 경우의 수
  • 1~10 중에 3개 뽑는다 하면 10, 3, 2 와 10, 2, 3 은 동일하게 여김

중복순열

  • 순서 유의미
  • 중복 허용 (동일한 숫자 허용)
  • 1, 2, 1 과 1, 1, 2는 다르게 여김

중복 조합

  • 순서 무의미
  • 중복 허용 (동일 숫자 허용)
  • 1, 2, 1 과 1, 1, 2는 동일

CODE

참고 링크_

def combination(arr, r):
	for i in arr:
    	if r == 1:
        	yield [arr[i]]
        else:
        	for next in combination(arr[i+1:], r-1):
            #중복을 허용하지 않으니까 다음꺼부터
            	yield [arr[i]] + next

def complex_combination(arr, r):
	for i in arr:
    	if r == 1:
        	yield [arr[i]]
        else:
        	for next in complex_combination(arr[i:], r-1):
            #중복을 허용하기 때문에 자기 자신부터
            	yield [arr[i]] + next

def product(arr, r):
	for i in arr:
    	if r == 1:
        	yield [arr[i]]
        else:
        	for next in product(arr, r-1):
            #중복을 허용하고 순서도 중요하니까 그 자체로 넣기
            	yield [arr[i]] + next
                
 int main():
 
    for i in pruduct([0, 1], 5):
      print(i)
    #출력
    #[0,0,0,0,0]
    #[1,0,0,0,0]
    #[0,1,0,0,0]..
    #[1,1,0,0,0] ..
    #[1,1,1,1,1] .. 이런 식
    for i in complex_combination([0, 1], 5):
       print(i)
        #출력
    #[0,0,0,0,0] 
    #[1,0,0,0,0]
    #[1,1,0,0,0]
    #...
    #[1,1,1,1,1]
    for i in combination([0, 1, 2, 4, 5], 2):
       print(i)
    #[0, 1]
    #[1, 2]
    #...
    #[0, 5]
    #[4, 5]
    
  
profile
ML_engineer

0개의 댓글