[BOJ_Python]31797. 아~파트 아파트
2024. 10. 26. 15:04ㆍ[Algorithm]/문제 풀이
문제
https://www.acmicpc.net/problem/31797
사용 알고리즘
구현, 시뮬레이션
풀이
후기
1. 큰 어려움 없는 문제였다. 다만, 놓치기 쉬운 부분을 다시 깨닫게 해주는 문제이다.
처음에는 당연히 1 ~ 2N 사이의 숫자들로만 층이 구성된다고 생각하고 구현하였다.
하지만 계속 오답이였고, 이는 그런 조건이 없다는 것을 깨닫고 너무 당연하게 제한을 두었다는 걸 알게되었다.
처음에는 2N 크기의 리스트를 만들어서 풀었지만,
문제를 깨닫고 빈 리스트에 append 후, 층을 기준으로 정렬하는 방법을 사용했다.
2. 이후 술을 마실 사람을 찾는 방법은 두가지로 구현하였다.
2 - 1. 처음 떠오른 방식은 list형식의 인덱스로 접근하는 것이고, 시간효율성은 높지만 직관성이 조금 떨어진다.
2 - 2. 다른 방식은 deque를 사용하여 직접 접근하는 방식으로, 시간효율성은 낮지만 직관성이 높다.
코드
인덱스접근 방법
import sys
input = sys.stdin.readline
H, N = map(int, input().split())
hands = []
for i in range(1, N + 1):
h1, h2 = map(int, input().split())
hands.append((h1, i))
hands.append((h2, i))
hands.sort()
print(hands[(H - 1) % (N * 2)][1])
deque를 사용한 직접접근 방법
from collections import deque
H, N = map(int, input().split())
hands = deque()
for i in range(N):
H1, H2 = map(int, input().split())
hands.append((H1, i + 1))
hands.append((H2, i + 1))
hands = deque(sorted(hands))
for _ in range(H):
hand = hands.popleft()
hands.append(hand)
print(hands[-1][1])
결과

'[Algorithm] > 문제 풀이' 카테고리의 다른 글
[BOJ_Python] 20055. 컨베이어 벨트 위의 로봇 (2) | 2024.11.07 |
---|---|
[Softeer_Python]Lv3. 나무 섭지 (0) | 2024.10.31 |
[Programmers_Python]단어 변환 (0) | 2024.10.17 |
[BOJ_Python]1913. 달팽이 (0) | 2024.10.17 |
[BOJ_Python]1544. 사이클 단어 (2) | 2024.10.16 |