[JS] 10818 최소,최대 for문/Math 메서드

    2022.09.06

    10818 최소,최대

    https://www.acmicpc.net/problem/10818

     

    10818번: 최소, 최대

    첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

    www.acmicpc.net

    문제

    • N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
    • 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
    • 첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

    풀이1

    const fs = require('fs');
    const inputData = fs.readFileSync(0,'utf8').toString().trim().split('\n') // input값을 첫재 줄과 둘째 줄를 엔터값으로 나눠줌.
    const data = inputData[1].split(' ');
    const num = data.map((i) => Number(i)); // data값의 모든 요소들을 숫자형으로 바꿔줌.
    
    const max = Math.max(...num);
    const min = Math.min(...num);
    console.log(`${min} ${max}`);

    같은 방법이지만 더 가독성 있는 코드

    const fs = require('fs');
    const inputData = fs
        .readFileSync(0,'utf8')
        .toString()
        .trim()
        .split('\n')[1]
        .split(" ")
        .map((i) => parseInt(i));
    
    const max = Math.max(...inputData);
    const min = Math.min(...inputData);
    console.log(`${min} ${max}`);

    다른 변수를 설정하여 띄어쓰기로 배열을 나누고 숫자형으로 바꿀 필요없이 한번에 할 수 있다.

    풀이3

    • for문으로 풀기
    const fs = require('fs');
    const inputData = fs
        .readFileSync(0,'utf8')
        .toString()
        .trim()
        .split('\n')
        
    const caseN = parseInt(inputData[0])
    const data = inputData[1]
        .split(" ")
        .map((i) => parseInt(i));
    
    let min = data[0];
    let max = data[0];
    //data[0]부터 요소들을 하나씩 비교하여 값을 찾아 넣어줌.
    for(let i = 0; i<caseN;i++){
       if ( min > data[i]){ 
        min = data[i];
       }
       if ( max < data[i]){
        max = data[i];
       }
    }
    console.log(min,max)

    댓글