#5. 두 개 뽑아서 더하기 (프로그래머스)

박현재·2020년 10월 10일
0

두 개 뽑아서 더하기(프로그래머스, Javascript)

문제출처

문제

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

제한사항

numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.

문제풀이

//배열과 반복문 2개를 활용한 문제
function solution(numbers) {
    const answer = [];
    // 1. numbers에서 서로 다른 두 수를 뽑아서 더하지만 리그가 아닌 토너먼트식 경기로 생각.
    // numbers[1] + numbers[2] == numbers[2] + numbers[1] 이기 때문임.
    for(let i = 0; i < numbers.length - 1; i++){
        for(let j = i+1; j < numbers.length; j++){ 
            // 두 인자를 더해 sum에 저장
            const sum = numbers[i] + numbers[j];
            // 요소가 배열에 존재하는지 확인하고 배열을 업데이트
            if(answer.indexOf(sum) == -1){ //answer[]에 sum의 값이 없으면
                    answer.push(sum); //answer[]에 sum값을 추가한다.
            }
        }
    }
    // 2. 더한 것들을 오름차순으로 정렬 (결과)
    answer.sort((a,b)=>a-b);
    return answer;
}

공부내용

  1. 변수 선언 3가지 방법
    var : 변수를 선언, 동시에 값을 초기화.
    let : 블록 범위(scope) 지역 변수를 선언, 동시에 값을 초기화.
    const : 블록 범위 읽기 전용 상수를 선언.

  2. 명령어(배열의 메소드 indexOf, push, sort)
    배열의 메소드에 대해서 몇 가지 알아보자.
    answer.indexOf(sum): answer[]에 sum의 값이 없으면 -1, 있으면 배열의 위치값을 반환.
    sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환한다.
    answer.sort()는 숫자 맨 앞자리의 수가 적은 순서대로 정렬한다. (유니코드 순서대로 정렬)
    sort 메소드는 함수식(및 클로저)과 함께 편리하게 사용할 수 있다.

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
	return a - b;
});
console.log(numbers);

// 출력값: [1, 2, 3, 4, 5]

var numbers = [4, 2, 5, 1, 3];
numbers.sort((a,b)=>a-b);
return answer;
console.log(numbers);    

// 출력값: [1, 2, 3, 4, 5]

  1. 중복값을 제거하는 함수 이용하여 문제풀기
function solution(numbers) {
    const answer = [];
    for(let i = 0; i < numbers.length - 1; i++){
        for(let j = i+1; j < numbers.length; j++){ 
            answer.push(numbers[i] + numbers[j]);
        }
    }
    //answer[]에 있는 중복 값들 제거
    const result = [...new Set(answer)];
    //result[] 오름차순 정렬
    result.sort((a,b)=>a-b);
    return result;
}
  1. 더 공부할 내용
    리터럴, map
profile
바로 하자, Right Now!

1개의 댓글

comment-user-thumbnail
2021년 1월 29일

혼자서 코딩 공부중인 19살 남학생입니다 우연히 프로그래머스에서 자바스크립트 코딩테스트를 공부하던 도중에 많은 어려움을 겪었지만 박현재님의 깔끔하고 이해가 쉬운 설명 덕에 즐겁게 코딩을 할 수 있는 것 같습니다.

여기서 질문이 하나 있는데요 const sum = numbers[i] + numbers[j] 부분에 sum을 const로 선언을 하셨는데 const는 값을 변경 불가능한 상태를 만들때 쓴다고 알고 있었거든요 그래서 크롬 개발자 도구에 const a = 4; a = 5; 라고 값을 바꿔 보려 했지만 아니나 다를까 바뀌지 않았거든요 근데 for문 안에서는 한번 반복 할때 마다 새로운 변수로 인식이 되는 건가요? 아하! 혹시 for문을 돌리면서 const sum은 선언이 되는건가요? 하지만 같은 이름의 반복 선언은 불가능 할 텐데 어떻게 성공하는거죠? 바보 같은 질문이겠지만 혹시 답변 가능할까요?

답글 달기