반응형
Baekjoon Online Judge의 30969번 진주로 가자! (Hard) 문제의 Python 풀이입니다.
30969번: 진주로 가자! (Hard)
C++17, Python 3, PyPy3, C++20, C++17 (Clang), C++20 (Clang)...
www.acmicpc.net
💻코드
import sys
input = sys.stdin.readline
# 비용별 교통편의 개수를 저장할 리스트 초기화, 최대 요금 1000까지 고려
transportation_count_per_cost = [0 for _ in range(1002)]
# 진주로 가는 교통편의 요금을 저장할 변수
cost_to_jinju = 0
# 교통편의 개수만큼 반복
for _ in range(int(input())):
# 도착지와 요금을 입력받아 요금을 정수로 변환
destination, cost = input().split()
cost = int(cost)
# 도착지가 진주인 경우, 해당 요금을 저장
if destination == 'jinju':
cost_to_jinju = cost
else:
# 진주가 아닌 다른 도착지의 교통편 요금 카운트, 요금이 1000을 넘는 경우는 1001로 취급
transportation_count_per_cost[min(1000, cost)] += 1
# 진주로 가는 교통편의 요금 출력
print(cost_to_jinju)
# 진주로 가는 교통편보다 비싼 교통편의 개수를 계산하여 출력
print(sum(transportation_count_per_cost[cost_to_jinju+1:]))
🧠풀이
이 문제는 서울에서 진주로 가는 교통편의 요금과 그보다 비싼 교통편의 개수를 찾는 것이다.
입력 데이터의 양이 매우 많기 때문에, 빠른 입출력을 사용해야 한다.
최대 요금이 1000이라는 점을 고려하여, 요금별 교통편의 개수를 저장할 리스트를 1002개의 요소를 가지도록 초기화한다.
도착지가 진주일 경우 해당 요금을 따로 저장한다.
그렇지 않은 경우 해당 요금에 해당하는 리스트의 값을 1 증가시킨다.
진주의 최대 요금은 1000이기 때문에 1000보다 큰 값은 1001로 취급한다.
진주로 가는 교통편의 요금보다 높은 요금대의 교통편 개수를 리스트의 슬라이싱과 sum 함수를 사용하여 계산한다.
🤔느낀 점
메모리 제한때문에 몇번 틀렸다...
![[백준/Python] (S5) 진주로 가자! (Hard) - 30969 - Baekjoon Online Judge의 30969번 진주로 가자! (Hard) 문제의 Python 풀이입니다. - 모든 영역 Baekjoon Online Judge](http://t1.daumcdn.net/tistory_admin/static/images/xBoxReplace_250.png)
반응형
댓글