백준 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를 이용해 중복되는 요소가 없거나, 중복되는 요소들 중 첫번째 요소만 가져가서 새로운 배열을 만들 수 있습니다.
'기타 > 알고리즘(백준)' 카테고리의 다른 글
[JS] 백준 1193번 분수 찾기 (0) | 2022.10.25 |
---|---|
[JS] 백준 1157 단어 공부(중복되는 문자열 개수 세는 법) (0) | 2022.10.13 |
[JS] 백준 1110번 더하기 사이클 (0) | 2022.09.25 |
[JS] 백준 2480 주사위 세개 (0) | 2022.09.21 |
[JS] 백준 2525번 오븐 시계 (0) | 2022.09.21 |