[프로그래머스] 두 개 뽑아서 더하기

최유나·2024년 7월 18일
0

프로그래머스

목록 보기
39/53

✨ 두 개 뽑아서 더하기

나의 풀이

function solution(numbers) {
    let 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. 들어온 배열의 요소를 확인한다.
  2. 배열의 두개 요소를 뽑아 덧셈한 모든 경우의 수를 구한다.
    서로 다른 인덱스 안의 두 개의 수를 뽑아 더하라고 했으므로
    1) if를 통해 i!==j 같지 않을 경우에만 합을 구하고,
    2) j가 무조건 1보다 큰 수부터 시작 해야함
  3. 중복된 값은 제거한다.
    1) if(answer.indexOf(sum) === -1)는 저 위의 같지 않을 때의 값을 리턴하기 위한 조건이다.
  4. 배열값을 리턴한다.

for() : 반복문
sort() : 오름차순
indexOf() : String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환, 일치하는 값이 없으면 -1을 반환

(출처 : String.prototype.indexOf())

다른사람의 풀이

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)
}

...new Set : 전개 구문(spread operator), 배열이나 문자열과 같이 반복 가능한 문자를 0개 이상의 인수 (함수로 호출할 경우) 또는 요소 (배열 리터럴의 경우)로 확장하여, 0개 이상의 키-값의 쌍으로 객체로 확장
기존 배열이나 객체의 전체 또는 일부를 다른 배열이나 객체로 빠르게 복사

배열에서의 spread 연산자+
const fruitOne = ['apple', 'banana'];
const fruitTwo = ['grape', 'peach'];

// 기존 방법
var fruitAll = fruitOne.concat(fruitTwo);

console.log(fruitAll); // ['apple', 'banana', 'grape', 'peach']

// slice 사용
var fruitOne = ['apple', 'banana'];
var fruitTwo = fruitOne.slice();

var fruitTwo.push('grape');

console.log(fruitOne); // ['apple', 'banana']
console.log(fruitTwo); // ['apple', 'banana', 'grape']

// map 사용
var fruitOne = ['apple', 'banana'];
var fruitTwo = fruitOne.map((item) => item);

var fruitTwo.push('grape');

console.log(fruitOne); // ['apple', 'banana']
console.log(fruitTwo); // ['apple', 'banana', 'grape']

// ES6 spread 연산사 활용 방법
const fruitAll = [...fruitOne, ...fruitTwo];

console.log(fruitAll); // ['apple', 'banana', 'grape', 'peach']

// spread 연산자 사용
const fruitOne = ['apple', 'banana'];
const fruitTwo = [...fruitOne, 'grape'];

console.log(fruitOne); // ['apple', 'banana']
console.log(fruitTwo); // ['apple', 'banana', 'grape']

// 객체에서의 spread 연산자
let user = { name: 'Kim', city: 'Seoul' };

user = { ...user, age: 28 };
console.log (user); // { name: 'Kim', city: 'Seoul', age: 28 }

user = { ...user, name: 'John', age: 30 }
console.log(user); // { name: 'John', city: 'Seoul', age: 30 }

(출처 : 스프레드 연산자)
(출처 : spread operator)

Set : 객체는 값의 컬렉션, Set의 값은 한 번만 나타날 수 있으며, Set의 컬렉션에서는 고유한 값 Set의 요소를 삽입 순서대로 순회, 삽입 순서는 각 요소가 add() 메서드에 의해 Set에 성공적으로 삽입된 순서(즉, add()가 호출될 때 이미 Set에 동일한 요소가 없는 경우)에 해당

Set

  • value값 만을 저장하며 중복을 허용하지 않는 Collection, 동일한 값은 1개만 가짐
  • value값으로 같은 객체가 들어올 경우 중복값으로 인지X
  • 대소문자를 구분하기 때문에, hi와 HI는 다른 값으로 인지

왜 사용할까?

  • value값으로 고유한 값을 가질 수 있습니다.
  • 중복값을 제거할 수 있습니다.
const a = new Set([1, 2, 3]);
const b = new Map([
  [1, "one"],
  [2, "two"],
  [4, "four"],
]);
console.log(a.union(b)); // Set(4) {1, 2, 3, 4}

// set
const empty = new Set();
console.log(empty); // Set(0) {}

const nums = new Set([1, 2, 3, 4, 5]);
console.log(nums); // Set(5) { 1, 2, 3, 4, 5 }

const str = new Set('HELLO');
console.log(str); // Set(4) { 'H', 'E', 'L', 'O' }

const objArr = new Set([
  {name:'라이언',company:'kakao'},
  {name:'브라운',company:'naver'},
  {name:'프로도',company:'kakao'},
  {name:'라이언',company:'kakao'}, 
  {name:'펭수',company:'ebs'}
]);
console.log(objArr);
/* Set(5) {
  { name: '라이언', company: 'kakao' },
  { name: '브라운', company: 'naver' },
  { name: '프로도', company: 'kakao' },
  { name: '라이언', company: 'kakao' },
  { name: '펭수', company: 'ebs' }
} */

Set 메서드

  1. 요소 추가: Set.add(value)
const nums = new Set([1, 2, 3, 4, 5]);

nums.add(200);
console.log(nums); // Set(6) { 1, 2, 3, 4, 5, 200 }
  1. 요소 일부 삭제: Set.delete(value)
nums.delete(2);
console.log(nums); // Set(5) { 1, 3, 4, 5, 200 }
  1. 요소 존재 확인: Set.has(value)
const isChecked = nums.has(200);
console.log(isChecked); // true
  1. 요소 갯수 확인: Set.size
const checkSize = nums.size;
console.log(checkSize); // 5
  1. 요소 전체 삭제: Set.clear()
nums.clear();
console.log(nums); // Set(0) {}

Set 반복문 (for-of)

const strArr = new Set(['A', 'B', 'C', 'D', 'E']); // new Set('ABCDE') 일때도 결과는 같다
console.log(strArr); // Set(5) { 'A', 'B', 'C', 'D', 'E' }

for (const alphabet of strArr) {
  console.log(alphabet); // A B C D E
}

for (const alphabet of strArr.keys()) {
  console.log(alphabet); // A B C D E
}

for (const alphabet of strArr.values()) {
  console.log(alphabet); // A B C D E
}

Set -> Array 변환

const names = new Set([ 'john', 'alice', 'john' ]);
console.log(names); // Set(2) { 'john', 'alice' }

const check1 = Array.from(names);
console.log(check1); // [ 'john', 'alice' ]

const check2 = [ ...names ];
console.log(check2); // [ 'john', 'alice' ]

(출처 : Set)

(출처 : [JavaScript] new Set() 이란?)

0개의 댓글

관련 채용 정보