문제
정수 배열 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. 뽑은 값의 중복을 제거한다.
3. 새로운 배열에 넣는다.
4. 배열을 정렬한다.
첫 시작은 map과 forEach 메서드를 이용해 중복적으로 사용해준 뒤 배열의 값들을 서로 하나씩 더하도록 만들어 봤다.
let numbers = [2,1,3,4,1];
console.log(solution(numbers));
console.log()
function solution() {
let newArr = numbers.map((el)=>{
return el + numbers.map((el)=>{
return el
})
});
return newArr;
}
let numbers = [2,1,3,4,1];
solution(numbers);
console.log(solution(numbers));
console.log()
하지만 실패,,
map은 어느정도 익숙해졌다고 생각하지만 map안에 map을 쓰는 것이 아직은 어렵다.
어제 개인 프로젝트를 하며 map안에 map을 쓰는 것을 봤지만 아직 머릿속에 제대로 안들어와 있는 것 같다.
어찌저찌 또 for문,,,,,, for문 멈춰!!!!
for문을 중복으로 사용해서 각 값을 모두 더해주기로 했다. (과정①)
하지만, 여기서 주의할 점은 문제에서 '각기 다른 인덱스를 더해라' 라고 했기 때문에 'i !==j' 라는 조건을 넣어줘야 했다.
만일 이와 같이 사용하지 않을 경우에는 i와 j가 다른 인덱스임을 보장 받기 위해서는 j에 대한 for문에 'j=1'부터 시작하는 for문을 만들어줬어야 했을 것이다.
그 후 Set이라는 자료구조를 이용해 그 값들을 넣어주었다. 왜냐하면 값을 중복해서 넣는다고 하더라도 Set안에는 값이 중복되지 않고 하나만 들어가기 때문이다. (과정②)
(중복을 없애라! 라는 문구를 보자마자 Set을 써야겠다고 생각했다.)
그 후 forEach를 통해 Set에 있는 요소들을 배열로 넣어준 뒤 (과정③) sort를 이용해 정렬해주었다. (과정④)
function solution(numbers) {
let answer = [];
const sum = new Set();
for(let i=0;i<numbers.length;i++){
for(let j=0;j<numbers.length;j++){
if (i!==j){
sum.add(numbers[i]+numbers[j]);
}
}
}
sum.forEach((el)=>{
answer.push(el);
})
answer.sort(function(a,b){
return a-b});
return answer;
};
// let numbers = [2,1,3,4,1];
let numbers = [5,0,2,7];
solution(numbers);
console.log(solution(numbers));
console.log()
'Algorithm' 카테고리의 다른 글
명예의 전당(1) [프로그래머스] (1) | 2023.10.19 |
---|---|
콜라 문제 [프로그래머스] (0) | 2023.10.19 |
푸드 파이트 대회 [프로그래머스] (1) | 2023.10.17 |
가장 가까운 같은 글자 [프로그래머스] (0) | 2023.10.16 |
[1차] 비밀지도 [프로그래머스] (2) | 2023.10.16 |