🎪 문제 설명
정수 배열 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] |
🎪 나의 문제 풀이
- 처음 문제풀이
function solution(numbers) {
var answer = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
let sum = numbers[i] + numbers[j];
if (answer.indexOf(sum) == -1) {
answer.push(sum);
}
}
}
answer.sort((a,b)=>a-b);
return answer;
}
1) 배열의 두 수 뽑아 더하기
numbers의 각 요소에 접근해야 하므로 0번 인덱스부터 numbers의 길이만큼 도는 i와 나머지 한 수의 인덱스를 겹치지 않게 뽑으려면 j를 i+1에서 부터 numbers의 길이까지 반복하는 이중 for문을 이용하여 더한 값을 sum에 담아 주었다.
2) 중복된 값 제거
이렇게 구한 값들에서 중복된 숫자를 제거해주자.
특정 문자의 위치를 찾는 indexOf()메서드를 이용하여 배열에 sum과 같은 값이 없으면 answer배열에 담아주었다.
3) 오름차순 정렬
숫자를 오름차순으로 정렬하는 것이므로 a-b로 크기를 비교하는 함수를 사용해 정렬해주었다.
🎪 다른 문제 풀이
👉 set()이용
function solution(numbers) {
const temp = []
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
temp.push(numbers[i] + numbers[j])
}
}
const answer = [...new Set(temp)]
return answer.sort((a, b) => a - b)
}
내가 푼 방법은 이중포문을 돌린 후에 중복된 값을 뺀 채로 배열에 넣는 순으로 구현하였는데,
먼저 두 수를 뽑아 더해준 모든 값을 temp에 담은 후에 set을 쓰면 자동적으로 중복된 값이 제거되니까 더 간편한 것 같다. map, set에 대해 이해는 가는데 막상 문제 풀 때는 생각이 잘 안난다.. 😂
🎨 set() 메서드
- set객체는 중복되지 않은 유일한 값들의 집합 => 수학적 집합을 구현하기 위한 자료구조
- set 객체의 특징
- 동일한 값을 중복하여 포함할 수 없다
- 요소 순서에 의미 없다
- 인덱스를 요소에 접근 불가
- set객체 생성
- set객체는 set의 생성자 함수로 생성
- 인수를 전달히자 않을 경우 빈 set 객체 생성
- set 생성자 함수는 이터러블을 인수로 받아 set객체 생성
const set = new Set();
console.log(set); // Set(0) {}
const set1 = new Set([1, 2, 3, 3]);
console.log(set1); // Set(3) {1, 2, 3}
- set객체는 이터러블이기 때문에 for ..of 문으로 순회가능하고, 스프레드 문법, 배열 디스트럭처링의 대상이 될 수 있다
const set = new Set([1, 2, 3]);
// Set 객체는 Set.prototype의 Symbol.iterator 메서드를 상속받는 이터러블이다.
console.log(Symbol.iterator in set); // true
// 이터러블인 Set 객체는 for...of 문으로 순회할 수 있다.
for (const value of set) {
console.log(value); // 1 2 3
}
// 이터러블인 Set 객체는 스프레드 문법의 대상이 될 수 있다.
console.log([...set]); // [1, 2, 3]
// 이터러블인 Set 객체는 배열 디스트럭처링 할당의 대상이 될 수 있다.
const [a, ...rest] = [...set];
console.log(a, rest); // 1, [2, 3]
'알고리즘' 카테고리의 다른 글
[프로그래머스 / 코딩테스트 연습] 약수의 개수와 덧셈-자바스크립트(javascript) (0) | 2023.07.05 |
---|---|
[프로그래머스 / 코딩테스트 연습] 최소 직사각형 -자바스크립트(javascr (0) | 2023.04.11 |
[프로그래머스 / 코딩테스트 연습] 완주하지 못한 선수-자바스크립트(javascript) (0) | 2023.04.10 |
[프로그래머스 / 코딩테스트 연습] 수박수박수박수박수박수?-자바스크립트(javascript) (0) | 2023.04.10 |
[프로그래머스 / 코딩테스트 연습] 문자열 다루기 기본-자바스크립트(javascript) (1) | 2023.04.10 |
댓글