[프로그래머스][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)이 되어 버리기 때문에 돌지 않는다. 변수도 더 안쓰고 많이 깔끔한 코드인 것 같다.