[프로그래머스] 연습, Python | 두 개 뽑아서 더하기
두 개 뽑아서 더하기
답:
def solution(numbers):
answer = []
while numbers:
now = numbers.pop()
for n in numbers:
answer.append((now + n))
return sorted(list(set(answer))) # 여기 주의
def solution(numbers):
answer = []
while numbers:
now = numbers.pop()
for n in numbers:
r = now + n
if r in answer:
continue
else:
answer.append(r)
return sorted(answer)
문제 분석 및 해석
정수 배열 numbers가 주어질 때 numbers내 서로 다른 인덱스에 있는 두개의 수를 뽑아 더한다.
만들 수 있는 모든 수를 배열에 담아 return해주기.
>> 풀이생각
** 주의할 점
- 인덱스만 다르고, 같은 숫자가 있을 수 있음.
- 같은 인덱스에 위치한 숫자를 두번 쓸 수 없음 (= 단순하게 for문만으로는 안된다.)
1) stack 개념을 차용해서 빼낸 숫자와 나머지 수를 모두 곱하여 answer array에 append.
2) 결과값이 같은 수를 걸러낼 수 있는 로직이 필요함
방법 :
- set함수.
- if로 미리 걸러서 append 해주기
풀이.
1) stack개념 차용
numbers에서 stack.pop()으로 마지막 요소를 빼내고, for문으로 남은 수를 각각 빼내어 계산할 수 있도록 함
while numbers:
now = numbers.pop()
for n in numbers:
...
2) 결과값이 같은 수를 걸러내기
방법 1 : set-list-sorted 사용
for n in numbers:
answer.append((now + n))
return sorted(list(set(answer)))
이 방법에서 주의할 점 :
answer배열을 set형태로 변경할때 자동으로 sort상태로 변경해주지만
list로 변경할때 인덱스 위치가 바뀔 수 있으므로 꼭 sorted로 한 번 정렬해주어야한다.
방법 2 : 미리 if문으로 점검
...
for n in numbers:
r = now + n
if r in answer:
continue
# else:
answer.append(r)
return sorted(answer)
answer 배열에 계산한 결과값이 있는지 확인하고, True면 append없이 continue로 다음단계로 넘어가도록 한다.
else는 생략이 가능하므로 깔끔하게 정리했다.
set - list - sorted는 전체적으로 무난한 결과를 얻었는데,
if문으로 점검하는 경우 while문이 과도하게 돌아가는 케이스가 있는 듯 하다. (4.34ms)
프로젝트하다가 알고리즘에 소홀해져서 다시 차근차근 폼 올리는 중이다.
lv.1-2 위주로 기억 되살리고 3단계 도전 가즈아