[백준] JavaScript 3052번 나머지

Noma·2021년 8월 30일
0
post-custom-banner

Question

[백준] JavaScript 3052번 나머지

input

첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

output

첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

example

39
40
41
42
43
44
82
83
84
85

output : 6

Solution 1

Set 사용

Javascript에서 Set 객체를 이용하면 중복없는 데이터를 표현할 수 있다.
Set 객체의 이런 특징을 이용해서, 배열의 중복을 제거한다.

➕ Set 객체의 길이를 구할땐 size를 사용하면 된다.

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

Solution 2

indexOf와 filter 사용

indexOf 함수는 배열에서 특정값이 처음으로 나타나는 index를 리턴한다.
filter 함수는 특정 조건에 부합하는 배열의 모든 값을 배열 형태로 리턴한다.

filter((element,index)=>{
return ...})

const arr=require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(num=>(+num)%42);
const result=arr.filter((element,index)=>{
    return arr.indexOf(element)===index;
})
console.log(result.length);

Solution 3

forEach와 includes 사용

forEach 함수는 주어진 배열을 순회하면서, 배열의 원소들로 주어진 콜백함수를 실행한다.
includes 함수는 주어진 배열에 특정 값이 포함되는지 여부를 검사한다.

const arr=require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(num=>(+num)%42);
let uniqueArr=[];
restArr.forEach((element)=>{
    if(uniqueArr.includes(element)){
        return;
    }
    uniqueArr.push(element);
});
console.log(uniqueArr.length);

What I learned

  • Set 객체를 이용하면 중복없는 데이터를 표현할 수 있고, size 속성으로 요소의 개수를 구할 수 있다.
  • array.indexOf(특정값) : 특정값이 처음으로 나타나는 index를 리턴한다.
  • filter의 콜백함수의 인자로 element 이외에 index와 array도 받을 수 있다.
    • array.filter((element,index,array)=>{..})
    • 여기서 index는 처리할 현재 요소의 인덱스이고, array는 filter를 호출한 배열이다.

Reference

https://hianna.tistory.com/422

profile
오히려 좋아
post-custom-banner

0개의 댓글