본문 바로가기
문제 풀이/백준

[S4] 백준 31797 - 아~파트 아파트(Python3)

by JJong | 쫑 2024. 11. 14.

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]) # 각 항목의 첫 번째 요소를 기준으로 정렬

댓글