두 개 뽑아서 더하기

일을 하면서 항상 느껴왔던 알고리즘의 부족함을 덜어보고자 알고리즘 공부를 시작하려한다.

프로그래멋, 백준, 프로젝트 오일러 등등 많은 알고리즘 사이트의 문제를 쉬운 것 부터 매일 하나씩 꾸준히 풀어보고자 한다. 파이썬도 배울겸...

 

그 처음으로 프로그래머스에 있는 문제를 풀어보았다.

 

프로그래머스

- 두 개 뽑아서 더하기

 

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

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

programmers.co.kr

문제

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

제한 사항
numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예
numbers = [2, 1, 3, 4, 1]
return [2, 3, 4, 5, 6, 7]

numbers = [5, 0, 2, 7]
return [2, 5, 7, 9, 12]

첫 번째 코드

def solution(numbers):
    numbers.sort()
    answer = []
    
    for _ in range(len(numbers)):
        number = numbers.pop(0)
        
        for j in numbers:
            num = number + j
            if (answer.count(num) > 0 ):
                continue

            answer.append(num)
              
    return answer

print(solution([2, 1, 3, 4, 1]))
print(solution([5, 0, 2, 7]))

 

두 번째 코드

첫 번째 코드를 풀고 난 후 다른 이의 풀이를 보니 많이 부족해 보여 다시 짜 보았다.

def solution(numbers):
    answer = []
    
    for i in range(len(numbers)):
        for j in numbers[i+1:]:
            answer.append(numbers[i] + j)
            
    return sorted(list(set(answer)))
            
print(solution([5,0,2,7]))
print(solution([2, 1, 3, 4, 1]))

여기서 제일 중요한 부분은 set 함수인듯싶다.

중복을 자기가 알아서 제거해 준다.

 

조금 다른 생각을 해 보면 처음 numbers를 받을 때 바로 sort() 함수로 정렬을 한다면 마지막에 sorted 를 하는 것 보다 아주 조금이나마 시간을 단축을 하지 않을까? 생각해 봤다.

+ Recent posts