728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/68644
주어진 배열에서 두 개의 수를 뽑아 만들 수 있는 모든 수를 구하는 문제이다!
이전에 풀었던 문제와 비슷해서 쉽게 풀 수 있었다!
내 풀이
def solution(numbers):
answer = []
for i in range(len(numbers)):
for j in range(i+1, len(numbers)):
tmp = numbers[i] + numbers[j]
# answer에 존재하지 않은 새로운 값이면 추가
if tmp not in answer:
answer.append(tmp)
return sorted(answer)
numbers = [2, 1, 3, 4, 1]이 주어졌을 때,
우리가 필요한 계산은
2 + 1
2 + 3
2 + 4
2 + 1
-----
1 + 3
1 + 4
1 + 1
-----
3 + 4
3 + 1
-----
4 + 1
이다.
나머지는 어차피 계산하더라도 순서만 바뀌는 것이기 때문에 할 필요가 없다.
즉, 첫 번째로 numbers 루프를 돌며 차례대로 2, 1, 3, 4, ..를 순회하고
두 번째 순회에서는 해당 숫자 뒤에 나타나는 수를 순회하면 된다.
즉, i가 0일 때 j는 1 ~ 4를 순회,
i가 1일 때 j는 2 ~ 4를 순회,
i가 2일 때 j는 3 ~ 4를 순회,
i가 3일 때 j는 4를 순회하게 된다.
이 후, 계산한 값이 answer 배열에 없으면 그 값을 추가하고,
구한 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)))
나는 answer에 값이 있는지 판단하는 코드를 추가적으로 진행했는데,
위의 코드와 같이 set을 이용하여 쉽게 중복을 없앨 수도 있다!
def solution(numbers):
answer = set()
for i in range(len(numbers)):
for j in range(i+1, len(numbers)):
answer.add(numbers[i] + numbers[j])
answer = list(answer)
answer.sort()
return answer
혹은 위와 같이 애초에 answer을 set으로 설정할 수도 있다.
위의 방법이 가장 좋은 방법인듯하다.
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 1 소수 만들기 (1) | 2024.08.22 |
---|---|
[프로그래머스][PYTHON] Lv. 1 소수 찾기 (0) | 2024.08.21 |
[프로그래머스][PYTHON] Lv. 1 시저 암호 (0) | 2024.08.20 |
[프로그래머스][PYTHON] Lv. 1 삼총사 (0) | 2024.08.20 |
[프로그래머스][PYTHON] Lv. 1 콜라 문제 (0) | 2024.08.16 |