코딩테스트

[백준] 커트라인

져니01 2025. 3. 7. 21:09

문제보기 - https://www.acmicpc.net/problem/25305

문제명    - 커트라인

난이도    - B2

문제유형 - 구현

풀이일자 - 25.03.07

 

📌 문제 탐색하기

  • 응시자 수 N과 상을 받는사람 수 k를 공백을 사이에 두고 입력받음
    • 1 ≤ N ≤ 1000, 1 ≤ k ≤ N
  • 각 학생의 점수 x를 공백을 두고 입력받음
    • 0 ≤ x ≤ 10000
  • 상을 받는 커트라인(상위 k번째 점수)을 출력해야 함.

 

🛠 시간복잡도 확인

  • 이 최대 1000 이므로 정렬 가능
  • 정렬을 위해 sort() 사용 -> O(N log N)
  • 최종 시간 복잡도: O(N log N)

 

 

📌 코드 설계하기

  1. 응시자 수 N과 상을 받는 사람 수 k 입력받기
    • map(int, sys.stdin.readline().split()) 활용
  2. 점수 리스트를 입력받아 내림차순 정렬
    • sort(reverse=True) 사용
  3. k번째 점수 출력
    • scores[k-1] 사용

 

📌 정답 코드(1회차)

import sys

# 1. 응시자 수 N과 상을 받는 사람 수 k 입력받기
N,k = map(int, sys.stdin.readline().split())

# 2. 점수 리스트를 입력받아 내림차순 정렬
scores = list(map(int, sys.stdin.readline().split()))
scores.sort(reverse=True)

# 3.k번째 점수 출력
print(scores[k-1])

 

 

📌 추가정리

map(int, sys.stdin.readline().split()) vs list(map(int, sys.stdin.readline().split()))

표현 특징 메모리 사용 인덱싱 가능 여부 사용 가능 횟수
map(int, sys.stdin.readline().split()) 이터레이터
(한 번만 사용 가능)
적음
(메모리 효율적)
❌ (인덱싱 불가) 1회 (사용 후 소멸)
list(map(int, sys.stdin.readline().split())) 리스트 변환
(여러 번 사용 가능)
많음
(전체 데이터 저장)
✅ (인덱싱 가능) 무제한 (반복 사용 가능)

 

 

🔹 차이점 요약

  • map()만 사용하면 -> 메모리를 아끼지만, 한 번만 순회 가능하고 scores[0] 같은 인덱싱이 불가능.
  • list(map())을 사용하면 -> 모든 데이터를 한 번에 저장하여 여러 번 사용할 수 있지만, 메모리를 더 많이 차지함.

💡 추천 방식

  • 일반적인 문제 풀이: list(map(int, sys.stdin.readline().split())) 사용 (편리함)
  • 데이터 크기가 클 때: map(int, sys.stdin.readline().split()) 사용 (메모리 절약)