본문 바로가기

백준22993 - 서든어택 3 node.js 본문

개발/algorithm

백준22993 - 서든어택 3 node.js

자전하는명왕성 2024. 1. 21. 09:49

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

 

문제 풀이 방식

정렬과 반복문을 통해 풀이했다.

먼저, 두번째 줄에서 첫 번째 원소는 준원이의 공격력 K라고 하고, 나머지 원소를 플레이어 공격력의 집합 arr 라고 하자.

이후, 문제에서 자신보다 공격력이 낮은 플레이어를 잡을 경우, 해당 플레이어의 공격력을 흡수하는 조건이 주어졌기 때문에,

공격력의 집합인 arr를 오름차순으로 정렬하여 낮은 플레이어부터 맞상대하며 최대한 공격력(K)을 올릴 수 있도록 했다.

이 과정에서 맞닥뜨린 플레이어의 공격력이 준원이의 공격력보다 높다면 여기서 반복문을 중지하고 'No' 반환, 모든 플레이어를 순회하여 무찌를 수 있다면 'Yes'를 반환하도록 했다.

(추가로 1 <= N <= 100000)인 제한 조건에 따라, 준원이만 존재하는 경우도 있는데, 이는 '준원이만 생존'을 만족하기 때문에 'Yes'를 출력하면 된다.)

 

전체 소스 코드

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

function solution(data) {
  const N = +data[0];

  if (N == 1) {
    console.log("Yes");
    return;
  }

  let [K, ...arr] = data[1].split(" ").map(Number);
  let i = 0;
  arr.sort();

  let result = true;
  while (i < N - 1) {
    if (K > arr[i]) K += arr[i];
    else {
      result = false;
      break;
    }
    i++;
  }

  console.log(result ? "Yes" : "No");
}

solution(input);

 

Comments