[JS] BOJ 10818번 최소, 최대

yeopto·2022년 1월 11일
0

Algorithm

목록 보기
1/11
post-thumbnail

출처

BOJ

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

문제

N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

나의 풀이

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split("\n");

const N = Number(input[0]);
let arr = input[1].split(' ');
let min = Number(arr[0]);
let max = Number(arr[0]);

solution();

function solution() {
    for(let i = 0; i < N; i++) {
        if ((Number(arr[i]) > max)) {
            max = arr[i];
        }
        if ((Number(arr[i]) < min)) {
            min = arr[i];
        }
    }
    console.log(min, max);
}

입력 두번째 줄 input[1]을 공백을 기준으로 split 메서드를 사용해 나눠준 뒤 arr로 할당. min과 max를 처음에 arr 첫번째 인덱스로 선언해주고 for문으로 N만큼 반복. 반복문 안에 비교하는 if문 설정 후 min, max 출력.

다른 풀이 1

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split("\n");

const N = Number(input[0]);
let arr = input[1].split(' ').map(x => Number(x));

let min = arr[0];
let max = arr[0];

solution();

function solution() {
    for (let i = 1; i < N; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
        if (arr[i] < min) {
            min = arr[i];
        }
    }
    console.log(min, max);
}

같은 로직이지만 arr을 처음부터 map 메서드로 모든요소를 Number시켜줌. 반복문안에서 따로 Number를 사용할 필요없음. 또, arr 첫번째 인덱스로 min, max값들을 초기화 시켰기 때문에 두번째 인덱스부터 비교 하면 됨. 그래서 반복문 초기식이 1부터 시작하는 점이 다름. 메모리는 나의 풀이가 더 작았지만, 시간은 내 풀이가 더 걸렸음.

다른 풀이 2

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split("\n");

const N = Number(input[0]);
let arr = input[1].split(' ').map(x => Number(x));

solution();

function solution() {
    arr.sort((a, b) => a - b);

    console.log(arr[0], arr[N - 1]);
}

sort 메서드를 사용한 풀이다. sort는 정렬 순서를 정의하는 함수. a, b 2개의 요소를 파라미터로 입력 받고 리턴 값이 음수면 a가 앞, 양수면 b가 앞, 0이면 a와 b의 순서를 변경하지 않는다. 예를 들어 a = 10, b = 20 일때, a - b는 음수다. 음수 일땐 a가 앞이니까 자연스럽게 오름차순이 되고, b - a는 양수이기에 자연스럽게 b가 앞으로 가서 내림차순이 됨. 반대로 a = 20, b = 10 일땐 a - b 가 양수가 되고 양수면 b가 앞으로 가야하니 순서가 10, 20이 된다. b - a일때는 음수라 a가 앞이고 그럼 순서는 20, 10이 됨. a-b를 리턴했으므로 오름차순으로 정렬을 함. 오름차순에서 첫번째 요소가 최소값이고 마지막요소가 최대값이다. → 코드는 가장 짧지만 메모리와 시간이 가장 크고 오래걸림. 이유를 생각해봤을때 sort를 사용하지 않은 코드들은 따로 정렬하지 않고 비교만 하고 출력해서 그런듯 하다.(지극히 개인 생각)

profile
https://yeopto.github.io로 이동했습니다.

0개의 댓글