본문 바로가기

알고리즘 삽질장

[프로그래머스] 두 개 뽑아서 더하기

반응형


문제설명

https://programmers.co.kr/learn/courses/30/lessons/68644

 

코딩테스트 연습 - 두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

사고과정

  • N개 중 2개를 뽑는 조합의 경우의 수를 탐색하면서 그 경우의 수를 합한 결과값을 집합 자료구조형에 담아서 unique한 원소들만 남도록 구현했다.
  • 한 가지 배운점이 있는데, 그 동안 nested function(중첩 함수)에서 바깥 함수에서 정의한 변수를 inner 함수에서 사용할 때 어떻게 해야 하나 싶어서 잘 안찾아보고 그냥 전역에다가 정의를 했는데, 찾아보니 nonlocal 이라는 키워드를 사용하면 말끔히 해결되었다.. 진작 찾아볼 걸 싶었다 ㅜㅜ nonlocal 기억하자!

풀이

def solution(numbers):
    # n개 중 2개를 뽑는 조합의 경우의 수
    n = len(numbers)
    res = [0] * 2
    answer = set()
    
    def dfs(L, idx):
        nonlocal n, res
        if L == 2:
            answer.add(sum(res))
            return
        else:
            for i in range(idx, n):
                res[L] = numbers[i]
                dfs(L+1, i+1)
                
    dfs(0, 0)
    answer = sorted(list(answer))
    return answer

 

반응형