https://www.acmicpc.net/problem/31797
💡 해결과정
문제에 함정이 있었다. 아파트 술게임 특성상 절대 중간에 다른 층이 존재할 수 없다. 또, 독자적인 층을 부여할 수 없다.
예를 들면 사람은 3명인데, 손을 가장 위로 뻗으며, "내 오른손은 100층" 뭐 이런식으로 말이다.
하지만 이것은 실제 게임을 하는것이 아니라 문제이다. 고정관념에 휩싸였다간 이런 중간층 없이 높은 층을 불러버려 맞왜틀?을 외치게 만드는 문제다.

두 손의 높이를 편하게 left, right라고 부르겠다. 문제에서 주어지는 입력 조건은 참가자의 수 1,000일때 이 left, right가 9999, 10000일수도 있는 것이다.
👀 풀이
그래서 압축하듯이 정렬해서 풀면 된다.그래서 좌표 압축 문제가 이 문제와 나름 관련 있는 문제라고 생각한다.🧾코드
# 31797
n, m = map(int, input().split())
apt = []
for i in range(m):
l, r = map(int, input().split())
apt.append([l, i+1])
apt.append([r, i+1])
apt.sort(key= lambda x : x[0])
k = n % (2*m)
print(apt[k-1][1])
🚨 틀렸던 이유
람다식 개념이 흔들렸다. 처음에 아래처럼 코드를 작성했다가 error 를 맛보고 얼른 고쳤다. 이 코드는 리스트 내 각 항목의 첫 번째 요소가 아닌, 리스트 전체에서 두 번째 항목 apt[1]만을 참조하고 있어서 오류가 발생하는 것이다.
apt.sort(key= lambda x : apt[0]) # 리스트 전체에서 두 번째 항목을 기준으로 정렬
apt.sort(key= lambda x : x[0]) # 각 항목의 첫 번째 요소를 기준으로 정렬
'문제 풀이 > 백준' 카테고리의 다른 글
[G2] 백준 7453 - 합이 0인 네 정수 (Python3) (0) | 2025.02.25 |
---|---|
[G5] 백준 3020 - 개똥벌레 (Python3) (0) | 2025.02.25 |
[G4] 백준 10830 - 행렬 제곱 (Python3) (0) | 2024.11.11 |
[S1] 백준 1992 - 쿼드트리 (Python3) (1) | 2024.11.10 |
[G5] 백준 1074 - Z (Python3) (1) | 2024.11.10 |
댓글