본문 바로가기

algorithm/Backjoon

backjoon 10818 : 최소, 최대 / JavaScript

문제

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

입력

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

출력

첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.


처음에는 다음과 같이 Spread Operator를 이용해서 풀려고 했습니다.

 

/*
    Backjoon 10818번 
    문제 : 최소, 최대 (https://www.acmicpc.net/problem/10818)
    난이도 : 브론즈 3
*/
const fs = require("fs");
const stdin = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `5
7 10 35 30 7`
).split("\n");

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

const len = +input();
const arr = input().split(" ").map(Number);

console.log(Math.min(...arr), Math.max(...arr));

 

하지만 어림도 없지 StackSizeExceeded 발생!

 

그래서 현재 환경에서 Call Stack의 Size가 얼마나 되는지 확인해보았습니다.

 

 

15,699으로 뜨는군요... 

 

그래서 다음과 같이 forEach로 구현했습니다.

 

/*
    Backjoon 10818번 
    문제 : 최소, 최대 (https://www.acmicpc.net/problem/10818)
    난이도 : 브론즈 3
*/
const fs = require("fs");
const stdin = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `5
7 10 35 30 7`
).split("\n");

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

let min = 1000000;
let max = -1000000;

const len = +input();
const arr = input().split(" ").map(Number);

arr.forEach((num) => {
  if (num > max) max = num;
  if (num < min) min = num;
});
console.log(min, max);