본문 바로가기
코딩테스트

[Javascript] 백준 25305 : 커트라인

by 예린lynn 2025. 1. 9.
728x90

문제 : https://www.acmicpc.net/problem/25305

2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 N명의 학생들이 응시했다.

이들 중 점수가 가장 높은 k명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.

커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.

입력

첫째 줄에는 응시자의 수 N과 상을 받는 사람의 수 k가 공백을 사이에 두고 주어진다.

둘째 줄에는 각 학생의 점수 x가 공백을 사이에 두고 주어진다.

출력

상을 받는 커트라인을 출력하라.


📌 문제 탐색하기

점수가 높은 순으로 정렬하고, 그 중 k번째 값을 구하는 문제이다.

1. 내림차순 배열

2. 배열의 [k-1]값 구하기


📌 코드 설계하기

1. 입력값 가져오기

    -> [N, k, ...arr]=input

2. 내림차순 sort()

    -> arr.sort((a,b)=>b-a)

3. k번째 사람 점수 구하기

    -> arr[k-1]


📌 시도 회차 수정 사항

[1회차]

  • 당연히 맞을 줄 알았는데 틀렸다고 나온다...
  • 다시 보니 2가지 정도 문제가 있는 듯하다.

     1. N,k,arr에 잘못된 할당 방식

       -> input으로 값을 가져오는 코드에 대한 이해가 부족했다.

     2. a,b 값이 숫자가 아닌 문자열로 비교하고 있다.

       -> "12", "13" 이렇게 문자열로 배열에 저장되어 있기 때문에 제대로 비교가 되지 않는다.  

//실패한 코드
const input = require("fs").readFileSync(0, "utf-8").trim().split("\n");
  [N, k, ...arr] = input;

  arr.sort((a, b) => b - a);
  console.log(arr[k - 1]);

 

cf) 입력 코드 처리

const input = require("fs").readFileSync(0, "utf-8").trim().split("\n");
  1. readFileSync(0, "utf-8"): 표준 입력(키보드 또는 입력 파일)으로부터 데이터 읽기
  2. .trim() : 입력값의 앞뒤 공백 및 줄바꿈 제거
  3. .split("\n"): 입력값을 줄 단위로 나누기
//입력값
5 2
100 76 85 93 98

//코드
const input = require("fs").readFileSync(0, "utf-8").trim().split("\n");
//출력값
input = ["5 2", "100 76 85 93 98"];

//첫 줄 처리
const [N, k] = input[0].split(" ").map(Number);
//출력값
[5, 2]

//둘째 줄 처리
const arr = input[1].split(" ").map(Number);
//출력값
[100, 76, 85, 93, 98]

 


📌 정답 코드

  const input = require("fs").readFileSync(0, "utf-8").trim().split("\n");
  const [N, k] = input[0].split(" ").map(Number);
  const arr = input[1].split(" ");

  arr.sort((a, b) => Number(b) - Number(a));
  console.log(arr[k - 1]);
728x90