문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
-
numbers의 길이는 2 이상 100 이하입니다.
-
numbers의 모든 수는 0 이상 100 이하입니다.
출처 : programmers.co.kr/learn/courses/30/lessons/68644
풀이 방법
아래 그림과 같이 numbers의 원소 중에 한 개를 먼저 선택하고 이후의 요소들과 각각 덧셈을 한 후 리스트의 append()를 사용하여 answer에 넣는 일련의 과정을 반복하는 방법으로 풀었다. 중복 값을 제거하기 위해 set()을 사용했고, 오름차순 정렬을 위해 sorted()를 사용했다.
위의 방법으로 풀고 나니 앞에서부터 리스트의 pop()을 사용해도 될 것 같은 생각이 들어서 아래 그림처럼 pop()을 사용해 값을 하나씩 빼내면서, np.array()를 사용해 타입을 numpy.ndarray로 변환하고 각 요소에 덧셈을 하도록 했다. 위의 방법과 달리 연산 후 결과가 numpy.ndarray로 나오기 때문에 리스트로 변환 후 extend()를 사용해 answer를 구했다.
또한 numpy.ndarray의 각 요소의 변수 타입은 numpy.int64이기 때문에 내부 요소를 int로 변환할 수 있도록 리스트 컴프리헨션을 사용해서 변환한다.
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 리스트를 이용한 풀이 방법
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)))
# numpy의 배열을 이용한 풀이 방법
import numpy as np
def solution(numbers):
answer = []
for i in range(len(numbers)):
answer.extend(list(np.array(numbers.pop(0)) + np.array(numbers)))
return sorted(list(set([int(x) for x in answer])))
|
cs |
아래 그림은 두 가지 방법에 대해 프로그래머스에서 실행한 결과인데 리스트를 이용한 풀이 방법이 더 빠르다는 것을 알 수 있었다. 연산 속도에 영향을 주는 원인이 무엇인지 알아볼 필요가 있는 것 같다.
'프로그래머스 공부 > Python' 카테고리의 다른 글
[Level 1 / Python] 3진법 뒤집기(월간 코드 챌린지 시즌1) (1) | 2020.11.09 |
---|---|
[Level 1 / Python] 크레인 인형뽑기 게임(2019 카카오 개발자 겨울 인턴십) (1) | 2020.11.08 |
[Level 1 / Python] 내적(월간 코드 챌린지 시즌1) (1) | 2020.11.07 |
[Level 1 / Python] 키패드 누르기(2020 카카오 인턴십) (2) | 2020.11.05 |
[Level 1 / Python] 완주하지 못한 선수 (2) | 2019.12.04 |