[알고리즘] 백준 3052 javascript

yeo_oni·2021년 10월 27일
0

알고리즘

목록 보기
14/18

📝 나머지

문제

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

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


입력

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

1
2
3
4
5
6
7
8
9
10

출력

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

10

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


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

//입력으로 받은 요소 각각에 42로 나눈 나머지를 새로운 배열에 저장해준다.
const newInput = input.map((x) => x%42);
//새로운 배열 중 중복을 제거한다.
const set = new Set(newInput);
const uniqueArr = [...set];

//배열의 길이 = 나머지 개수
console.log(uniqueArr.length);


다른 풀이

다른 사람들의 풀이도 찾아봤다.

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

//42로 나눈 나머지를 중복 없이 저장할 배열을 생성
const userNum = [];

//forEach대신 map을 사용해도 된다.
input.forEach(x => {
    const num = x % 42;
    
  	//indexOf 메서드를 사용해 배열안에 값이 없다면 userNum에 넣어준다.
  	//일치하는 값이 없으면 -1 을 반환하는 메서드
    if (userNum.indexOf(num) === -1) {
        userNum.push(num);
    }
});

console.log(userNum.length);

map()

배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환하는 메서드

set

set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장 한다
즉, 중복을 제거할 수 있다

indexOf()

indexOf() 메서드는 호출한 String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환합니다.
일치하는 값이 없으면 -1을 반환합니다.

0개의 댓글