새소식

⌨️ Algorithms/백준

[Python] 백준 14469번_소가 길을 건너간 이유 3

2023. 2. 24. 23:16

  • -

https://www.acmicpc.net/problem/14469

 

14469번: 소가 길을 건너간 이유 3

첫 번째 소는 2초에 도착하고 3초에 농장을 입장한다. 그 다음에는 세 번째 소가 5초에 도착하여 12초에 농장을 입장한다. 마지막으로 두 번째 소가 8초에 오는데, 세 번째 소가 검문을 받고 있으

www.acmicpc.net

 

  • 존의 농장에 들어가는 문은 하나밖에 없고, 그 문을 통과하려면 감시관의 길고 긴 검문을 받아야 함
  • 여러 마리의 소가 한 번에 들어가려고 하면 줄이 그 만큼 길어짐
  • N마리의 소가 이 농장에 방문하러 왔음
  • 소가 도착한 시간과 검문받는 데 걸리는 시간은 소마다 다름 (같을 수도 있음)
  • 두 소가 동시에 검문을 받을 수는 없음
    • 예를 들어, 한 소가 5초에 도착했고 7초 동안 검문을 받으면,
    • 8초에 도착한 그 다음 소는 12초까지 줄을 서야 검문을 받을 수 있음
  • 모든 소가 농장에 입장하려면 얼마나 걸리는 지 구하기
  • 입력
    • 첫 줄에 100 이하의 양의 정수 N이 주어짐
    • 다음 N줄에는 한 줄에 하나씩 소의 도착 시각과 검문 시간이 주어짐
    • 각각 1,000,000 이하의 양의 정수
  • 출력
    • 모든 소가 농장에 입장하는 데 걸리는 최소 시간을 출력
  • 시간 제한: 2초
  • 메모리 제한: 512 MB

 

"""
입출력 예시)

3
2 1
8 3
5 7
    -> 15
"""
# 첫 번째 소는 2초에 도착하고 3초에 농장 입장
# 그 다음에는 세 번째 소가 5초에 도착하여 12초에 농장 입장
# 마지막으로 두 번째 소가 8초에 오는데, 세 번째 소가 검문을 받고 있으므로 12초까지 기다린 뒤 15초에 농장 입장

 

 

## 의사코드 ##

# 도착 시간을 기준으로 오름차순 정렬 
# cows.sort(key=lambda x: x[0])

# 다음 소의 도착 시간이 이전 소의 도착 시간 + 검문 시간 보다 작으면 
# 이전 소의 (도착 시간 + 검문 시간)에 다음 소의 검문 시간을 더함 

# 다음 소의 도착 시간이 이전 소의 (도착 시간 + 검문 시간)보다 크거나 같으면
# 다음 소의 (도착 시간 + 검문 시간)이 소요 시간

 

 

 

 

n = int(input())

cows = []
for _ in range(n):
    cows.append(tuple(map(int, input().split()))) # [(도착 시간, 검문 시간)]

# 도착 시간을 기준으로 오름차순 정렬
cows.sort(key=lambda x: x[0])

total = 0 # 소요 시간
for i in range(1, n):
    # 다음 소의 도착 시간이 이전 소의 (도착 시간 + 검문 시간)보다 크거나 같은 경우, 소요 시간은 다음 소의 (도착 시간 + 검문 시간) 
    if cows[i][0] >= cows[i-1][0] + cows[i-1][1]:
        total = cows[i][0] + cows[i][1]
    # 다음 소의 도착 시간이 이전 소의 (도착 시간 + 검문 시간) 보다 작은 경우, 소요 시간은 이전 소의 (도착 시간 + 검문 시간) + 다음 소의 검문 시간
    else:
        total += cows[i][1]
print(total)

 

-> 틀림

 

 

 

 

n = int(input())

cows = []
for _ in range(n):
    cows.append(tuple(map(int, input().split()))) # [(도착 시간, 검문 시간)]

# 도착 시간을 기준으로 오름차순 정렬
cows.sort(key=lambda x: x[0])

total = 0 # 소요 시간
for i in range(n):
    # 다음 소의 도착 시간이 이전 소의 (도착 시간 + 검문 시간)보다 크거나 같은 경우, 소요 시간은 다음 소의 (도착 시간 + 검문 시간) 
    if cows[i][0] >= total:
        total = cows[i][0] + cows[i][1]
    # 다음 소의 도착 시간이 이전 소의 (도착 시간 + 검문 시간) 보다 작은 경우, 소요 시간은 이전 소의 (도착 시간 + 검문 시간) + 다음 소의 검문 시간
    else:
        total += cows[i][1]
print(total)

 

-> '다음 소의 도착 시간이 이전 소의 (도착 시간 + 검문 시간)보다 크거나 같은 경우' 를 이전 소의 (도착 시간 + 검문 시간)이 아닌 소요 시간(total)과 비교

 

 

 

 

 

 

https://velog.io/@rjqnr928/%EB%B0%B1%EC%A4%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-14469%EB%B2%88-%EC%86%8C%EA%B0%80-%EA%B8%B8%EC%9D%84-%EA%B1%B4%EB%84%88%EA%B0%84-%EC%9D%B4%EC%9C%A0-3-Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

[백준 알고리즘] 14469번: 소가 길을 건너간 이유 3 (Python / 파이썬)

https://www.acmicpc.net/problem/14469문제이웃 농장의 소가 길을 마구잡이로 건너는 것에 진절머리가 난 존은 극단의 결정을 내린다. 농장 둘레에 매우 큰 울타리를 짓는 것이다. 이렇게 하면 근처 농장

velog.io

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!