Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 2577 : 숫자의 개수(set중복제거)

비망노트 2021. 9. 3. 23:52

문제

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

입력

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

출력

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

 

예제입력 예제출력
1
2
3
4
5
6
7
8
9
10
10


각 수를 42로 나눈 나머지는 1, 2, 3, 4, 5, 6, 7, 8, 9, 10이다.
42
84
252
420
840
126
42
84
420
126
1


모든 수를 42로 나눈 나머지는 0이다.
39
40
41
42
43
44
82
83
84
85
6


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

 

⭕ 풀이

 

const input=require('fs').readFileSync('/dev/stdin').toString().split('\n');
let num = Number(input);
let arr = [];


for(let i=0;i<10;i++){
    arr.push(input[i]%42);
}
const set = new Set(arr);
const answer = [...set];

console.log(answer.length);

배열 arr를 선언한뒤 for문을 통해 42로 나눈 나머지를 arr배열에 넣는식으로 만들었다.

그뒤 set 을 통해 arr배열내의 중복을 제거한 answer배열을 생성하고

answer배열의 길이를 출력했다.

알고리즘문제들이 이런식인가 set이나 등등의 몰랐던 기능을 활용하는것도 있지만

어떤식으로 풀이할것인지에 대한 고민이 더 오래걸리는것같다.

 

 

✅ set

const input = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,8];

const set = new Set(input);
const arr1 = [...set];

console.log(arr1)

//output [1,2,3,4,5,8]

const set = new Set(input);

중복값이 있는 배열을 Set객체로 만들어서 중복제거

const arr1 = [...set];

Set객체를 다시 배열로 변환

 

 

 

 

 

-출처

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