728x90
반응형
https://www.acmicpc.net/problem/14469
문제의 접근 방법
- 오름차순 정렬
- 반복문 속 조건문 사용
- 소가 도착했을 때, 기다릴 필요가 있는지 없는지 여부에 따라 구현
내가 막혔던 부분
아이디어는 같았지만 코드 짜는 방식에 있어서 오답과 정답으로 나뉘었다.
# 처음 짰던 코드 (오답 코드)
n = int(input())
arr = []
for _ in range(n):
a,b = map(int, input().split())
arr.append([a,b])
arr.sort()
time = 0
for i in range(len(arr)-1):
time = arr[i][0] + arr[i][1]
if time > arr[i+1][0]:
time = time + arr[i+1][1]
print(time)
위 코드의 정확한 오답 원인은 알아내지 못했지만 조건에 따라 값을 처리해주는 로직을 정확히 나눠서 실행되도록 수정했더니 정답이 나왔다!
문제 풀이 방법
n마리의 소를 의미하는 n값을 입력받기 -> n번만큼 반복문을 돌려 소의 도착 시각(a), 검문시간(b)를 입력 받아서 2차원 배열로 리스트 arr에 추가하기 -> 최소 시간을 측정하기 위해서 리스트 arr를 도착시각(a)을 기준으로 오름차순 정렬하기 -> 최소 시간을 계산해서 넣을 변수 time 선언 -> 두 가지 상황에 따라 처리해주기 -> 최소 시간 출력!
소스코드
# 정답 코드
n = int(input())
arr = []
for _ in range(n):
a,b = map(int, input().split())
arr.append([a,b])
arr.sort() # 빨리 도착한 소부터 넣어주어서 최소한의 시간으로 들어오게 만들기
time = 0
for i in range(len(arr)):
if time > arr[i][0]: # 다음 소가 이전 소가 검문 받고 있는 중에 도착 했을 때
time = time + arr[i][1] # 기다린 시간이 존재하므로 이전 소의 입장 시간 + 다음 소의 검문 시간
else: # 이전 소가 검문을 다 받은 후 도착 했을 때
time = arr[i][0] + arr[i][1] # 기다린 시간이 없으므로 다음 소 도착 시간 + 그 소의 검문 시간
print(time)
728x90
반응형
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] Project Teams : 20044번 - Python (0) | 2021.07.28 |
---|---|
[백준] 단어 퍼즐 : 9946번 - Python (0) | 2021.07.27 |
[백준] 스네이크 버드 : 16435번 - Python (0) | 2021.07.26 |
[백준] 숫자놀이 : 1755번 - Python (0) | 2021.07.26 |
[백준] 정열적인 정렬 : 16212번 - Python (0) | 2021.07.22 |