[백준 | Javascript] 3052

박기영·2022년 5월 17일
0

백준

목록 보기
38/127

1차원 배열 4단계
3052번. 나머지

문제

두 자연수 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

solution

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

let arr = [];

input.forEach((x) => {
	const num = x % 42;
  	
  	// arr 요소 중 num이 없으면 -1 반환
  	if(arr.indexOf(num) === -1){
    	arr.push(num); 
    }
})

console.log(arr.length);

해설

이 문제는 접근법에 따라 쉬워지기도 어려워지기도 한다. 필자는 배열 전체에서 한번에 중복되는 요소를 찾아내는 방법으로 접근을 했는데, 경우의 수가 많았기 때문에 상당히 까다로웠다.
그래서 구글링을 해본 결과, 다른 분들은 배열 전체가 아닌 forEach를 활용하여 배열 요소 하나하나에 대하여 진행을 했다.
input의 요소 하나를 42로 나눈 나머지에 해당하는 num이 arr에 없다면 arr에 num을 push()하고, 그 것을 각 요소마다 실행하면 된다.
만약, 0이 처음으로 push()된 num이라고 해보자. 다음 요소에서 또 다시 0이 num이 되면 그 때는 아무 일도 일어나지 않고, 다음 요소로 넘어간다. 또 다음 요소에서 0이 나오면 또 넘어간다. 이런 식으로 10개 요소 전부가 0을 가지면 결국 arr에는 0이 단 하나만 존재한다. 이 때의 arr 길이가 num에 할당된 값 중에서 중복되는 숫자가 몇 개 있는지를 알려주게 된다.

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글