728x90
출처: 백준
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
출력
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
예제 입력 1
1
2
3
4
5
6
7
8
9
10
예제 출력 1
10
예제 입력 2
42
84
252
420
840
126
42
84
420
126
예제 출력 2
1
예제 입력 3
39
40
41
42
43
44
82
83
84
85
예제 출력 3
6
내 코드 1
forEach를 사용한 경우
const readline = require("readline");
const rl = readline.createInterface({
input : process.stdin,
output : process.stdout
});
let input = [];
rl.on("line", function(line){
input.push(Number(line));
}).on("close", function(){
const check = [];
let num;
input.forEach( x => {
num = x % 42;
if(check.indexOf(num) === -1) check.push(num); // check배열에 num이 없을 경우 push
})
console.log(check.length);
process.exit();
})
내 코드 2
for문을 사용한 경우
const readline = require("readline");
const rl = readline.createInterface({
input : process.stdin,
output : process.stdout
});
let input = [];
rl.on("line", function(line){
input.push(Number(line));
}).on("close", function(){
const check = [];
let num;
for(let i=0; i<input.length; i++){
num = input[i] % 42;
if(check.indexOf(num) === -1) check.push(num); // check배열에 num이 없을 경우 push
}
console.log(check.length);
process.exit();
})
결과
> 1 > 2 > 3 > 4 > 5 > 6 > 7 > 8 > 9 > 10 10 |
> 42 > 84 > 252 > 420 > 840 > 126 > 42 > 84 > 420 > 126 1 |
> 39 > 40 > 41 > 42 > 43 > 44 > 82 > 83 > 84 > 85 6 |
처음엔 for문을 사용해봤는데 forEach()메서드로도 풀어봤다.
이 문제에서 중요한 부분은 서로 다른 값이 몇 개 있느냐를 구하는 부분이라고 생각하는데 indexOf를 사용해서 -1이 나오면 값이 없을 때라는 것을 알아두면 다른 문제를 풀 때 도움이 되겠다는 생각이 든다.
728x90
'프로그래밍 > 백준 알고리즘' 카테고리의 다른 글
[백준 / node.js] 8958번: OX퀴즈 (0) | 2021.08.03 |
---|---|
[백준 / node.js] 1546번: 평균 (0) | 2021.08.02 |
[백준 / node.js] 2577번: 숫자의 개수 (0) | 2021.07.31 |
[백준 / node.js] 2562번: 최댓값 (0) | 2021.07.30 |
[백준 / node.js] 10818번: 최소, 최대 (0) | 2021.07.29 |
댓글