3052 나머지

[Algorithm/JS] 백준 3052번 나머지

🔗 문제 바로가기

Question

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

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

Input

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

Output

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

Example Input 1

1
2
3
4
5
6
7
8
9
10

Example Output 1

10

Example Input 2

42
84
252
420
840
126
42
84
420
126

Example Output 2

1

Example Input 2

39
40
41
42
43
44
82
83
84
85

Example Output 2

6

Solution

내가 작성한 풀이는 이와 같다.

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

input.map((n) => arr.push(n % 42));
console.log([...new Set(arr)].length);

결과는 틀렸다고 한다. 아무리 봐도 틀린 점이 없고, 예제와 동일한 Output이 나오는데 어디서 틀린 것일까? 질문 게시판을 뒤져보았고,

3052번 nodejs 반레를 못찾겠습니다.

이 글을 보고 해답을 찾았다. Input 을 받아올 때 split() 이전에 trim()을 해줘야 한다! 입력값에 공백이 포함되어 있다고 한다.

공백이 어디에 포함되어있는지 확인해보자.

const input = fs.readFileSync('dev/stdin').toString().split('\n').map(Number);
console.log(`공백${input}어디에`); // 공백39,40,41,42,43,44,82,83,84,85어디에

공백.. 어디에 있을까? 나는 모르겠다. 🤔

정답 풀이

다시 제출한 풀이는 이와 같다.

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

input.map((n) => arr.push(n % 42));
console.log([...new Set(arr)].length);

Set 객체를 통해 arr 의 중복값을 제거했다. [...new Set(arr)]대신 Array.from(new Set(arr))로 사용할 수 있다.