티스토리 뷰

728x90
반응형

목차

     

    문제

     

    두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지이다. 

    예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 

    수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 

    그다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

     

    입력

     

    첫째 줄부터 열 번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 

    이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

     

    출력

     

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

     

    풀이

     

    처음에는 자바의 스트림에서 그렇듯 중복 제거 연산자가 있을 거라고 생각했다.

     

    하지만 그렇지 않았고, 자바스크립트의 중복 제거는 Set 자료구조를 이용한다는 것을 배웠다.

     

    문제 풀이 알고리즘은 다음과 같다.

     

    1. 주어진 입력을 42로 나눈 나머지를 배열 input에 넣어준다
    2. input을 '...' 연산자와 new Set(input)을 이용해 갱신해 준다. 이 과정에서 중복이 제거된다.

      1. 참고로 지난 글에도 나왔지만 '...'연산자는 스프레드 연산자라 불리며, ES6에서 도입된,
        배열이나 객체 등의 iterable 요소를 개별 요소로 확장하는 역할을 한다. 여기서는 Set 객체를 생성 시
        객체의 인수로 input의 모든 값을 전달하는 데 사용된다.
    3. 이어서 갱신된 배열의 길이를 input.length로 구해 출력한다.

     

    JavaScript

     

    const rl = require('readline').createInterface({
        input: process.stdin,
        output: process.stdout,
    });
    
    let input = [];
    
    rl.on('line', (line) => {
        input.push(Number(line) % 42);
    }).on('close', () => {
        input = [...new Set(input)];
    
        console.log(input.length);
    
        rl.close();
    });
    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/06   »
    1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30
    글 보관함