본문 바로가기
기타/알고리즘(백준)

[JS] 백준 3052번 나머지 (배열 중복 요소 제거 방법 세 가지)

by ㅇㅇ우너자나나 2022. 9. 29.

백준 3052번: 나머지

https://www.acmicpc.net/problem/3052

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net

 

 

 

방법1. Set 자료형 이용하기

let input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n').map(i => +i);
input = input.map(i => i%42)
const newSet = new Set(input);
console.log(newSet.size);

Set은 데이터의 집합체이며, index도 없고, 순서도 없습니다.

또한 배열과 다르게 중복된 데이터가 들어갈 수 없다는 특징이 있습니다.

따라서 배열을 set타입으로 바꾸는 과정에서 중복된 요소가 사라지게 됩니다.

Set의 인스턴스 프로퍼티인 size를 이용하면 개수를 쉽게 구할 수 있습니다.

 

 

방법2. 반복문과 includes를 이용하기

let input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n').map(i => +i%42);
let arr = [];
for(i=0; i<input.length; i++){
    if(!arr.includes(input[i])){
        arr.push(input[i])
    } else continue;
}
console.log(arr.length)

배열의 인스턴스 메서드인 includes를 이용해 배열이 특정 요소를 가지고 있는지 확인할 수 있습니다.

따라서, arr에 input의 중복되지 않은 요소들만 추가해줄 수 있습니다.

 

 

방법3. filter와 indexOf를 이용하기

let input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n').map(i => +i%42);
const newArr = input.filter((i, index) => input.indexOf(i) === index);
console.log(newArr.length);

 

indexOf는 특정 요소가 배열에서 몇번째 인덱스에 위치하고 있는지를 반환해줍니다.

또한, 만일 같은 요소가 두 개 이상 존재한다면, 첫번째 요소의 인덱스를 반환합니다.

indexOf를 이용해 중복되는 요소가 없거나, 중복되는 요소들 중 첫번째 요소만 가져가서 새로운 배열을 만들 수 있습니다.