두 개 뽑아서 더하기

Sheryl Yun·2023년 7월 31일
0

문제 링크

처음 풀이

문제를 쭉 읽고 풀이를 구상해보니 for문 2개를 돌리며 숫자를 더하고 마지막에 Set으로 중복을 제거해주면 될 것 같았다.

풀다가 막힌 부분

return 문에서 sort를 [...new Set(answer)].sort(); 형태로 썼더니 처음에 두 번째 문제 테스트 케이스에서 의도하지 않은 [12, 2, 5, 7, 9]가 나왔다.

사전 순이 아닌 숫자로 오름차순([2, 5, 7, 9, 12]) 되도록 하기 위해 .sort 뒤에 ((a, b) => a - b) 비교 연산을 추가해주었다.

function solution(numbers) {
    let answer = [];
    let len = numbers.length;
    
    for (let i = 0; i < len - 1; i++) {
        for (let j = i + 1; j < len; j++) {
            answer.push(numbers[i] + numbers[j]);
        }
    }
    
    return [...new Set(answer)].sort((a, b) => a - b);
}

새로운 풀이

보통 풀고 나서 '다른 사람의 풀이'를 보면 내 답과 다른 경우가 많아서 항상 이 코너에 기록했다. 그런데 이번 문제는 첫 번째 있는 답(= 모법 답안)이랑 똑같았다 👏👏

다른 방식의 풀이도 궁금해서 스크롤을 해보니 아예 처음부터 set으로만 푼 코드가 있었다. 흥미진진

function solution(numbers) {
    const n = new Set();
    
    for (i in numbers) {
        for (j in numbers) {
            if(i !== j) n.add(numbers[i] + numbers[j]);
        }
    }

    return [...n].sort((a, b) => a - b);
}

배운 점

  • 배열에서 for-in으로 index만 꺼낼 수 있다.
  • 두 개의 숫자를 더하는 모든 경우의 수를 위해 인덱스가 다른 숫자들끼리 더함
  • set에 추가할 때는 add 메서드 사용
  • 배열 메서드인 sort를 사용하기 위해 set을 배열로 변경 (spread 문법)

for-in을 쓰니 for문을 이중으로 써도 훨씬 간결해졌다.
어차피 마지막에 중복을 제거해야 한다면 이 방법 써 보기

profile
영어강사, 프론트엔드 개발자를 거쳐 데이터 분석가를 준비하고 있습니다 ─ 데이터분석 블로그: https://cherylog.tistory.com/

0개의 댓글