[노씨데브 킬링캠프] 1주차 - 문제풀이: Combinations

KissNode·2024년 1월 6일
0

노씨데브 킬링캠프

목록 보기
4/73

Combinations

Combinations - LeetCode

접근 방법 [필수 작성]

제한조건 확인

  • nCk 조합
  • nCk 에서 가능한 최대 연산수는 얼마인가에 대한 고찰 (직관: nC(n/2) 정도 아닐까?)
  • 20C10 값은? → 계산기 사용불가할때 이럴땐 시간복잡도를 어떻게 계한하지? → 대충 20^10 이라고 생각해보자 → 10^10이면 이미 시간초과??

코드 구현 [필수 작성]

# 5시 20분 시작 - 5시 35분 끝
class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        candidate = []
        result = []

        def backtrack(start,candidate):

            if len(candidate) == k:
                #print(candidate)
                result.append(candidate[:])
                return 

            for i in range(start,n+1):
                candidate.append(i)
                backtrack(i+1,candidate)
                candidate.pop()
            
            return result
        
        return backtrack(1,candidate)

배우게 된 점 [ 필수 X ]

제출 눌렀는데 틀렸던 코드

# 5시 20분 시작 - 
class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        def backtrack():
            result = []
            candidate = []

            if len(candidate) == k:
                result.append(candidate)
                return 

            for i in range(1,n+1):
                candidate.append(i)
                backtrack()
                candidate.pop()
            
            return result
        
        return backtrack()

업데이트되는 변수는 전역변수로 활용

재귀함수가 실행될때 마다 candidate = [] 로 인해 계속해서 후보군 리스트가 초기화되어서 무한루프를 돌게됨. 업데이트 되는 후보군리스트나 결과리스트는 반드시 재귀함수 바깥으로 빼주어 전역변수로 만들어주는 것이 중요하다.

참조에 대한 이해

result.append(candidate)

profile
어제보다 더, 내일보다 덜.

0개의 댓글

관련 채용 정보