오늘은 문제를 주어진 시간 안에 다 풀지 못하고 다른 분들이 올려주신 코드를 리뷰하게 되었습니다.

코드에서 사용되는 함수가 유용하고 알고리즘이 간단하다는 점에서 향후 문제를 풀 때 도움이 될 것 같습니다.

그래서 기록용으로 게시글을 올렸습니다.

문제는 아래와 같습니다.

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

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+

programmers.co.kr

 

코드는 다음과 같습니다.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

from itertools import product
def solution(numbers, target):
    l = [(x, -x) for x in numbers]
    s=list(map(sum,product(*l)))
    return s.count(target)
solution([1,1,1,1,1],3)

 

 

풀이과정

설명을 위해 중간에 print 함수를 추가했습니다.

from itertools import product
def solution(numbers, target):
    l = [(x, -x) for x in numbers]
    s = list(product(*l))
    ss=list(map(sum,product(*l)))
    print(l)
    print(s)
    print(ss)
    return ss.count(target)
solution([1,1,1,1,1],3)

 [1,1,1,1,1]을 numbers로, 3을 target으로 할 때, solution 함수의 print(l), print(s), print(ss), 결과값은 아래와 같습니다.

  • print(l)을 통해 numbers의 각 숫자와 마이너스 형태를 취한 숫자를 튜플 형태로 나타냈습니다.
  • list(product(*l))을 통해 (1,1,1,1,1) 부터 (-1,-1,-1,-1,-1) 까지 1과 -1로 구성할 수 있는 배열을 튜플 형태로 나타냈습니다.
  • 마지막으로 map과 sum 함수를 이용해 앞에서 구한 배열을 합쳤습니다. 예를 들면, (1,1,1,1,1)은 5가 되는 것입니다.
  • 결과값으로 ss에서 target인 개수를 반환했습니다.

+ Recent posts