문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해 주세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
입출력 예
numbers | result |
[2, 1, 3, 4, 1] | [2, 3, 4, 5, 6, 7] |
[5, 0 , 2, 7] | [2, 5, 7, 9 ,12] |
입출력 예 설명
입출력 예 #1
- 2 = 1 + 1입니다. (1이 numbers에 두 개 있습니다.)
- 3 = 2 + 1 입니다.
- 4 = 1 + 3입니다.
- 5 = 1 + 4 = 2 + 3입니다.
- 6 = 2 + 4입니다.
- 7 = 3 + 4입니다.
- 따라서 [2, 3, 4, 5, 6, 7]을 return 해야 합니다.
입출력 예 #2
- 2 = 0 + 2입니다.
- 5 = 5 + 0입니다.
- 7 = 0 + 7 = 5 + 2입니다.
- 9 = 2 + 7입니다.
- 12 = 5 + 7입니다.
- 따라서 [2, 5, 7, 9, 12]를 return 해야 합니다.
문제풀이
- 나의 풀이
- 2중 for문을 사용해서 index가 같지 않으면서 합이 중복되지 않는 경우에만 answer에 push 하고 sort()를 사용하여 결괏값을 오름차순으로 정렬되어 반환되도록 코드를 구현하였다.
function solution(numbers) {
var answer = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = 0; j < numbers.length; j++) {
const num1 = numbers[i];
const num2 = numbers[j];
// index가 같지 않으면서 (서로 다른 값을 더하기 위해서) answer에 값이 없는 경우(중복되지 않는 경우) answer에 num1과 num2의 합을 push한다.
if (i !== j && !answer.includes(num1 + num2)) {
answer.push(num1 + num2);
}
}
}
// 오름차순으로 정렬
answer = answer.sort((a, b) => (a > b ? 1 : -1));
return answer;
}
// map()이나 filter() 같은 배열 연산자는 numbers의 길이만큼만 연산을 진행하기 때문에 사용하지 못하고, 대신 2중 for문을 사용하였다.
solution([2, 1, 3, 4, 1]);
solution([5, 0, 2, 7]);
- 다른 분의 풀이
- "나의 풀이"와 다른 점은 new Set()을 사용했다는 점과, sort()에서 a > b ? 1 : -1이 아닌 a - b를 사용하였다는 점인데
- 여기서 Set()은 자바스크립트의 고유한 값들의 집합을 다루는 자료 구조로써 이를 활용하면 데이터 중복을 제거하고 유일한 값들을 효과적으로 관리할 수 있다고 한다.
- 문자, 숫자 등의 데이터 타입은 중복 제거가 되는 데 객체(Object)는 중복 제거가 안되는 것으로 확인됨
- 아래 풀이를 통해서 숫자 배열을 정렬할 때 a > b : 1 - 1 대신 a -b로 코드를 간결하게 바꿀 수 있다는 걸 알게 되었다.
function solution(numbers) {
var answer = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = 0; j < numbers.length; j++) {
const num1 = numbers[i];
const num2 = numbers[j];
// index가 같지 않으면서 answer에 num1과 num2의 합을 push한다.
if (i !== j) {
answer.push(num1 + num2);
}
}
}
// new Set()을 사용하여 중복된 값 제거 && .sort((a, b) => a - b)를 사용하여 오름차순으로 정렬
answer = [...new Set(answer)].sort((a, b) => a - b);
return answer;
}
// map()이나 filter() 같은 배열 연산자는 numbers의 길이만큼만 연산을 진행하기 때문에 사용하지 못하고, 대신 2중 for문을 사용하였다.
solution([2, 1, 3, 4, 1]);
solution([5, 0, 2, 7]);
'코딩 테스트 연습 > Programmers' 카테고리의 다른 글
[프로그래머스] 2016년 (0) | 2023.08.18 |
---|---|
[프로그래머스] 가장 가까운 같은 글자 (0) | 2023.08.17 |
[프로그래머스] 행렬 덧셈 (0) | 2023.08.16 |
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2023.08.15 |
[프로그래머스] 시저 암호 (0) | 2023.08.14 |
댓글