[프로그래머스][LV.1] 두 개 뽑아서 더하기 | python3
2025. 1. 20. 15:35ㆍ프로그래머스/LV.1
문제 링크: 두 개 뽑아서 더하기
문제 설명
문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
문제 풀이
answer=list(set(answer))
answer.sort()
위 두줄 순서 바꿔서 쓰면 테스느4,5번에서 에러남.
set는 순서가 없는 자료형이라 그렇다고 함.
set에 들어간 순서대로 list에 넣어주는 것이 일반적이지만 보장은 할 수 없다고...
근데 이러한 문제로 다들 4,5 번에서 실패했던데 왜 그런지 궁금하다. 테스트 4번 5번이 뭔지 궁금하다.
---
첫번째 수 부터 차례대로 다른 원소들과 더하면 첫번째 수는 더이상 필요없다. 그 다음 두번째 수부터 다른 원소들과 더하고 나면 두번째 수도 필요없다. 이런식으로 쭉 하다 보면 마지막 원소는 아무런 동작도 하지 않아도 그 앞의 원소들과의 합이 이미 구해져있다. 그렇기 때문에 마지막원소의 인덱스는 필요가 없기 때문에 for문에서 빼준다.
마지막
answer=list(set(answer)) 이 부분이 좀 맘에 안든다. 시간적으로 오래 걸릴 것 같음.
더 좋은 방법은 없을까
내코드
def solution(numbers):
answer = []
for idx in range(len(numbers)-1):
i=idx+1
while i<len(numbers):
answer.append(numbers[idx]+numbers[i])
i+=1
answer=list(set(answer))
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)))
이중 for문으로 코드가 더 간략하게 짜여진 것 같다. 처음 for문으로 인데스 처음부터 끝까지 돌고 두번째 for문에서 i+1부터 마지막까지 돌면 어차피 마지막인덱스는 두번째 for문에서 (-1,-1)이 되어 버리기 때문에 돌지 않는다. 변수도 더 안쓰고 많이 깔끔한 코드인 것 같다.
'프로그래머스 > LV.1' 카테고리의 다른 글
[프로그래머스][LV.1] 삼총사 | python3 (0) | 2025.01.22 |
---|---|
[프로그래머스][LV.1] 푸드 파이트 대회 | python3 (0) | 2025.01.20 |
[프로그래머스][LV.1] 가장 가까운 같은 글자 | python3 (0) | 2025.01.20 |
[프로그래머스][LV.1] 최소직사각형 | python3 (0) | 2025.01.20 |
[프로그래머스][LV.1] 3진법 뒤집기 | python3 (0) | 2025.01.20 |