archive

[프로그래머스] 두 수 뽑아서 더하기 본문

STUDY/알고리즘

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

seonyounggg 2021. 1. 14. 11:57

✏️ 문제

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

 

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

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

programmers.co.kr

✏️ 풀이

서로 다른 인덱스에 있는 두 수를 순차적으로 참조하기 위해

반복문을 2개 사용한다.

안쪽 반복문에서는 바깥쪽 반복문 기준 그 이후의 인덱스부터만 참조하면 된다.
마지막으로 sort만 하고 반환하면 되는 아주 간단한 문제

✏️ 코드

def solution(numbers):
    answer = []
    for idx, a in enumerate(numbers):
        for b in numbers[idx+1:]:
            if a + b not in answer:
                answer.append(a+b)
    
    answer.sort()
    return answer

✏️ 다른 사람 풀이

def solution(numbers):
    answer = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            answer.append(numbers[i] + numbers[j])
    return sorted(list(set(answer)))

파이썬에서 list 인덱스 접근하려고 enumerate 쓰면 된다고 들었는데,

위 방법이 좀 더 보편적인 것 같다.

그리고 set을 사용하면 중복을 알아서 제거해주기 때문에 마지막에 set으로 바꿔준다.

 

from itertools import combinations

def solution(numbers):
    answer = []
    l = list(combinations(numbers, 2))

    for i in l:
        answer.append(i[0]+i[1])
    answer = list(set(answer))
    answer.sort()

    return answer

itertools 라이브러리를 사용한 풀이이다.

중복을 허용하지 않고 두 개의 원소를 순서 관계없이 선택해야 하므로 combination을 사용한다.

조합의 결과로 나온 튜플의 두 원소를 합하여 answer에 저장하고 마찬가지로 set을 이용해 중복을 제거하였다.

(itertools라이브러리에 대해 추가적으로 정리하였다 -> seonyounggg.tistory.com/61)

 

(+) sort와 sorted의 차이

sort 함수는 list.sort( ) 형식으로 "리스트형의 메소드"이며 리스트 원본값을 직접 수정한다. (제자리 정렬)

sorted 함수는 sorted( list ) 형식으로 "내장 함수"이며 리스트 원본 값은 그대로이고 정렬 값을 반환한다.

sort는 None을 리턴한다는 점을 주의해야 한다.

 

 

 

 

Comments