archive
[프로그래머스] 두 수 뽑아서 더하기 본문
✏️ 문제
programmers.co.kr/learn/courses/30/lessons/68644
코딩테스트 연습 - 두 개 뽑아서 더하기
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한
programmers.co.kr
✏️ 풀이
서로 다른 인덱스에 있는 두 수를 순차적으로 참조하기 위해
반복문을 2개 사용한다.
안쪽 반복문에서는 바깥쪽 반복문 기준 그 이후의 인덱스부터만 참조하면 된다.
마지막으로 sort만 하고 반환하면 되는 아주 간단한 문제
✏️ 코드
def solution(numbers):
answer = []
for idx, a in enumerate(numbers):
for b in numbers[idx+1:]:
if a + b not in answer:
answer.append(a+b)
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)))
파이썬에서 list 인덱스 접근하려고 enumerate 쓰면 된다고 들었는데,
위 방법이 좀 더 보편적인 것 같다.
그리고 set을 사용하면 중복을 알아서 제거해주기 때문에 마지막에 set으로 바꿔준다.
from itertools import combinations
def solution(numbers):
answer = []
l = list(combinations(numbers, 2))
for i in l:
answer.append(i[0]+i[1])
answer = list(set(answer))
answer.sort()
return answer
itertools 라이브러리를 사용한 풀이이다.
중복을 허용하지 않고 두 개의 원소를 순서 관계없이 선택해야 하므로 combination을 사용한다.
조합의 결과로 나온 튜플의 두 원소를 합하여 answer에 저장하고 마찬가지로 set을 이용해 중복을 제거하였다.
(itertools라이브러리에 대해 추가적으로 정리하였다 -> seonyounggg.tistory.com/61)
(+) sort와 sorted의 차이
sort 함수는 list.sort( ) 형식으로 "리스트형의 메소드"이며 리스트 원본값을 직접 수정한다. (제자리 정렬)
sorted 함수는 sorted( list ) 형식으로 "내장 함수"이며 리스트 원본 값은 그대로이고 정렬 값을 반환한다.
sort는 None을 리턴한다는 점을 주의해야 한다.
'STUDY > 알고리즘' 카테고리의 다른 글
[leetCode] Valid Palindrome (Python) (0) | 2021.01.28 |
---|---|
알고리즘 문제풀이 단계 (0) | 2021.01.18 |
[프로그래머스] 같은 숫자는 싫어 (Python) (0) | 2020.12.12 |
[프로그래머스] 두 정수의 합 (Python) (0) | 2020.12.12 |
[프로그래머스] 예산 (Python) (0) | 2020.12.11 |