백준 10818번 JavaScript 문제풀이

Cho Dragoo·2021년 5월 11일
0
post-thumbnail

JavaScript 백준 온라인 알고리즘 공부

백준 10818 번 JavaScript 문제

최소, 최대
https://www.acmicpc.net/problem/10818



본인이 제출한 답

const fs = require("fs");
const [n, ...arr] = (process.platform === "linux"
  ? fs.readFileSync("/dev/stdin").toString()
  : `5
20 10 35 30 7`
)
  .trim()
  .split(/\s/);

let Minimum = Number(arr[0]);
let Maximum = Number(arr[0]);

for (let i = 0; i < n; i++) {
  ArrNum = Number(arr[i]);
  if (Maximum < ArrNum) {
    Maximum = ArrNum;
  }
}

for (let i = 0; i < n; i++) {
  ArrNum = Number(arr[i]);
  if (Minimum > ArrNum) {
    Minimum = ArrNum;
  }
}

console.log(Minimum + " " + Maximum);

풀이과정 소감

  • 통과는 분명 되는 코드이지만 그냥 봐도 영리하지 못한 코드인 것 같다. for문을 연속으로 따로 돌려서인지 메모리, 시간 모두 많이 잡아 먹어보인다. sort 메서드를 사용하는 방법도 있지만 너무나 매직같은 메서드라 지금 이 문제에서 쓰는건 알고리즘 공부에 적합하지 않는다고 생각했다.
const fs = require("fs");
const [n, ...arr] = (process.platform === "linux"
  ? fs.readFileSync("/dev/stdin").toString()
  : `5
20 10 5 30 7
`
)
  .trim()
  .split(/\s/);

for (let i = 0; i < n - 1; i++) {
  for (let z = 0; z < n - 1; z++) {
    LNum = Number(arr[z]);
    RNum = Number(arr[z + 1]);
    if (LNum > RNum) {
      let mum = LNum;
      LNum = RNum;
      RNum = mum;
      arr[z] = LNum;
      arr[z + 1] = RNum;
    }
  }
}

console.log(arr[0] + " " + arr[n - 1]);
  • 버블정렬 (bubble sort)를 기억한걸 토대로 다시 짠 코드. 배열의 인접 숫자들을 전부 대조해 결과적으로 가장 작은 수는 배열 처음에 가장 큰 수는 배열 마지막에 배치되며 배열 양 끝을 지정하고 출력한다. 뭔가 많이 번거로운 느낌이다.

    다른 언어는 모르겠지만 자바스크립트에서는 임의의 변수를 따로만들어 배열에 넣어두고 교환해야한다. 문제는 이 코드는 로컬에서는 잘 작동하지만 시간을 많이 걸리는 로직이였는지 BOJ에서는 시간초과로 불합격이다.....



const fs = require("fs");
const [n, ...arr] = (process.platform === "linux"
  ? fs.readFileSync("/dev/stdin").toString()
  : `5
20 10 35 30 7`
)
  .trim()
  .split(/\s/);

let Minimum = Number(arr[0]);
let Maximum = Number(arr[0]);

for (let i = 0; i < n; i++) {
  ArrNum = Number(arr[i]);
  if (Maximum < ArrNum) {
    Maximum = ArrNum;
  }
  if (Minimum > ArrNum) {
    Minimum = ArrNum;
  }
}

console.log(Minimum + " " + Maximum);
  • 결국 for문 안에 최솟값 최대값을 담당하는 if문을 돌리는게 정답에 가까운 것 같다. 최대 최소만 구하는 조건에서는 직접 대조하는 버블정렬은 확실히 비효율적이라는 걸 느끼게한다.
profile
어떤 문제든 파악 할 수 있으며 해결책을 찾을 수 있는 개발능력을 꿈꾸고 있습니다.

0개의 댓글