hyei-devlog

[Python/파이썬] 백준 25305 커트라인 본문

Online Judge/Baekjoon

[Python/파이썬] 백준 25305 커트라인

winter126 2025. 2. 1. 23:01

📍 문제

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

백준 25305 커트라인

 

📍 전체 코드

N, k = map(int, input().split())
num_list = list(map(int, input().split()))

num_list.sort(reverse=True)

print(num_list[k-1])

 

📍 문제 풀이

  • num_list = list(map(int, input().split())) 한 줄로 입력받아 정수 리스트로 변환한다.
  • num_list.sort(reverse=True) 정수 리스트를 내림차순으로 정렬한다. (기본값: 오름차순)
  • print(num_list[k-1]) 문제에서 요구하는 위치의 점수를 출력한다.

 

📍 문제 해결을 위한 고민

리스트를 정렬하는 방법에는 'sorted()'와 'sort()'가 있다.
둘 중 어떤 것을 사용할지 고민하다가 'sort()'를 선택했다.
 
`sorted()`는 원본 리스트를 변경하지 않기 때문에 새로운 리스트에 할당해야 하는 번거로움이 있다.
반면, `sort()`는 원본 리스트를 직접 정렬하므로 이를 사용했다.
직접 정렬하는 방식을 통해 불필요한 변수 생성을 피하고, 메모리를 절약하며, 코드를 더 간결하게 작성할 수 있었다. 

 

⭐️ 중요 포인트 & 핵심 개념

 

파이썬에서 한 줄로 입력받은 정수들을 리스트로 변환하는 대표적인 방법

 
1. map()과 split()을 사용

numbers = list(map(int, input().split()))

 
2. 리스트 컴프리헨션 사용

numbers = [int(x) for x in input().split()]

 
3. sys.stdin.readline() 사용 (대용량 입력 처리 시)

import sys
numbers = list(map(int, sys.stdin.readline().split()))

 


 

sorted()와 sort() 비교

 
1. sorted() 사용하는 경우 (원본 유지, 새로운 리스트 반환)

num_list = [100, 76, 85, 93, 98]
num_list = sorted(num_list, reverse=True)  # 새로운 리스트 반환
print(num_list)  # [100, 98, 93, 85, 76]

 
✔️ 장점

  • 원본을 변경하지 않고 새롭게 정렬된 리스트를 만들 수 있음
  • 체이닝이 가능하여 가독성이 좋음
  • 리스트가 필요할 때마다 새로운 정렬된 버전을 사용할 수 있음

❌ 단점

  • 원본 리스트를 그대로 유지해야 하는 상황이 아니라면, 불필요하게 새로운 리스트를 할당하는 메모리 낭비가 발생할 수 있음

 
2. sort() 사용하는 경우 (원본 변경, 반환값 없음)

num_list = [100, 76, 85, 93, 98]
num_list.sort(reverse=True) # 원본 리스트를 직접 정렬
print(num_list) # [100, 98, 93, 85, 76]
 

✔️ 장점

  • 메모리 효율적 (새로운 리스트를 만들지 않고 원본을 직접 정렬)
  • 필요 없는 변수 할당 없이 깔끔함

❌ 단점

  • 원본 리스트가 변경되므로 이전 순서를 유지해야 하는 경우에는 적합하지 않음
  • 체이닝이 불가능 (num_list = num_list.sort(reverse=True) ❌ → None 반환됨)

 


 
📌 정리

  • 메모리 절약, 코드 간결화, 불필요한 변수 생성 방지 → sort()
  • 원본 유지, 새로운 리스트가 필요할 경우 → sorted()