일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Dijkstra
- Spring
- 알고리즘
- 최단경로
- 2981
- 2018 KAKAO BLIND RECRUITMENT
- 문자열
- Python
- java
- 파이썬
- HTTP
- 소수
- codility
- applicationeventpublisher
- 탐욕법
- 코딩테스트
- error
- BFS
- beandefinitionstoreexception
- brute force
- spring security
- Greedy
- 백준
- 라이브템플릿
- 프로그래머스
- API
- javascript
- counting elements
- algorithm
- springboot
Archives
- Today
- Total
Altiora Petamus
두 개 뽑아서 더 하기 (프로그래머스) 본문
문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한 사항
numbers 의 길이는 2 이상 100 이하
모든 수는 0 이상 100 이하
입출력 예
문제 풀이
반복문에서 배열의 원소를 하나하나씩 꺼낸다.
이중반복문에서 자기 자신을 제외하고 하나씩 더하게 한다.
이전 인덱스를 더하는 것은 중복되어 의미없기 때문에, 항상 다음 인덱스를 더하게 한다.
이미 배열에 존재하면 넘어가고 없으면 배열에 담는다. 또는 Set을 사용하여 중복을 제거한다.
오름차순으로 정렬하여 리턴한다.
JavaScript
function solution(numbers) {
let temp = []; // 더한 값을 담을 배열 선언
for (let i = 0; i < numbers.length; i++) { // 원소들을 하나씩 꺼내기
for (let j = i + 1; j < numbers.length; j++) { // i 다음 인덱스부터 나열
let addNumber = numbers[i] + numbers[j];
temp.push(addNumber); // 모두 temp에 담는다.
}
}
// Set 자료구조는 중복을 허용하지 않기때문에 같은 값이 있다면 항상 마지막에 들어온 값만 남긴다.
const answer = [...new Set(temp)]; // spread로 전개한 후 다시 담기
return answer.sort((a, b) => a - b); // Arrow fn, 오름차순 정렬
}
Python
def solution(numbers):
answer = []
for i in range(len(numbers) - 1): # 0부터 numbers-1 인덱스까지
for j in numbers[i + 1:]: # i+1 인덱스부터 끝까지
answer.append(numbers[i] + j) # append는 배열의 마지막에 값을 넣는다
return sorted(list(set(answer))) # set으로 변환하여 중복 제거 후, 리스트에 담고 정렬