본문 바로가기

코딩/알고리즘

백준) 7568 - 덩치 JS

📌 문제 링크

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


📌 문제 탐색하기

  • 몸무게와 키가 주어지고 각각의 크기가 더 크다면 덩치가 크다고 한다. 이때 덩치 순으로 등수를 구하여라. 중복 등수가 있다면 그만큼 다음 등수는 존재하지 않는다.

시간복잡도

  • 이중 for문이 들어가 있어 O(n^2)

알고리즘 선택

  • 브루트포스

📌 코드 설계하기

  1. 문제의 `input`을 공백으로 나누고 숫자로 변환합니다.
  2. 등수를 저장할 배열 `rank`을 선언합니다.
  3. 주어진 덩치 정보(몸무게, 키)를 순회할 반복문을 만듭니다.
  4. 등수를 나타내는 `grade` 변수를 선언하고 `1`을 할당합니다.
  5. 덩치 정보의 몸무게와 키에 접근하기 위해 또 하나의 반복문을 만듭니다.
  6. `if (i !== j)`으로 자기 자신과의 비교를 피합니다.
  7. 만약 몸무게와 키가 다음 배열의 몸무게와 키보다 크다면 `grade`를 `1`씩 올려줍니다.
  8. 등수 배열에 `grade`를 삽입합니다.
  9. 계산된 등수를 공백으로 구분하여 출력합니다.

📌 정답 코드

//https://www.acmicpc.net/problem/7568
export {};

const fs = require("fs");
const filePath =
  process.platform === "linux" ? "/dev/stdin" : __dirname + "/input1.txt";
const [_, ...input] = fs
  .readFileSync(filePath)
  .toString()
  .trim()
  .split("\n")
  .map((x: string) => x.split(" ").map(Number));
const rank = [];

for (let i = 0; i < input.length; i++) {
  let grade = 1;
  for (let j = 0; j < input.length; j++) {
    if (i !== j) {
      if (input[i][0] < input[j][0] && input[i][1] < input[j][1]) grade++;
    }
  }
  rank.push(grade);
}

console.log(rank.join(" "));

'코딩 > 알고리즘' 카테고리의 다른 글

백준) 2775 - 부녀회장이 될테야 JS  (2) 2024.10.16
백준) 2748 - 피보나치 수2 JS  (0) 2024.10.15
백준) 2578 - 빙고 JS  (0) 2024.10.14
백준) 2947 - 나무 조각 JS  (0) 2024.10.12
백준) 25305 - 커트라인 JS  (0) 2024.10.11