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");
- readFileSync(0, "utf-8"): 표준 입력(키보드 또는 입력 파일)으로부터 데이터 읽기
- .trim() : 입력값의 앞뒤 공백 및 줄바꿈 제거
- .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
'코딩테스트' 카테고리의 다른 글
[Javascript] 백준 7568 : 덩치 (0) | 2025.01.12 |
---|---|
[Javascript] 백준 2947 : 나무 조각 (1) | 2025.01.11 |
[Javascript] 백준 5635 : 생일 (1) | 2025.01.08 |
[Javascript] 백준 1181 : 단어 정렬 (0) | 2025.01.08 |
[Javascript] 백준 10814 : 나이순 정렬 (0) | 2025.01.07 |