알고리즘-2021/03/25

sanghun Lee·2021년 3월 25일
0

알고리즘

목록 보기
1/52


문제 설명

정수 배열 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) {
    //이중포문을 해야하나 //for문한번씩 돌면서 시작 index를 올리면
    //어차피 중복되니까 1번째 숫자랑 다 더한거 넣으면 되네
    //sort 오름차순 정렬 ㄱ
    

    let answer = [];

    const arrLen = numbers.length; //5
    let fix = 0;

  while(fix < arrLen-1){
      let firstNum = numbers[fix];
      for(let i = fix+1; i < arrLen; i ++){
          answer.push(firstNum + numbers[i])
      }  
      fix += 1;
    }

    answer = answer.sort((a,b) => a - b)    
    let set = new Set(answer);
    let newArr = [...set];
    answer = newArr;
    console.log(newArr);
    return answer;
}

저렇게 적어 놓고 제출을 하였지만 문제를 풀면서 몇가지 더 깨달은 것은
경우의 수를 항상 먼저생각하고 for문의 여부를 생각해야한다는 것 같다.
처음에 반복문 하나로 돌리겠다는 우매함은 결국 무너졌다 :)...

그리고 js에서 배열내의 중복을 처리하는 방법은 크게 3가지가 존재한다.


JS로 배열 내 중복을 처리하는 방법

1. Set 자료형

중복을 허용하지 않는 Set자료형 특징을 살려 이용

const arr = [1,1,1,2,3,4,4,5,5];
const set = new Set(arr);
const newArr = [...set];

console.log(newArr);
//[ 1, 2, 3, 4, 5 ]

2. indexOf(), filter() 메서드

조건에 부합하는 것만을 Return하는 특성을 가진 filter메서드와
해당 인자의 index를 찾는 메서드인 indexOf를 사용하여 필터링 해주는 방법

const arr = [1,1,1,2,3,4,4,5,5];
const newArr = arr.filter((el, idx) => {
	return arr.indexOf(el) === idx;
})

console.log(newArr);
//[ 1, 2, 3, 4, 5 ]

3. forEach(), includes() 메서드

forEach반복문을 돌며 포함여부(includes 메서드)를 판단하여 새로운 배열에 넣어주는 방법

const arr = [1,1,1,2,3,4,4,5,5];
let newArr = [];

arr.forEach((el)=>{
  if(!newArr.includes(el)){
    newArr.push(el)
  }
});

console.log(newArr);

참고

profile
알고리즘 풀이를 담은 블로그입니다.

0개의 댓글