문제출처: https://www.acmicpc.net/problem/15922
1. 문제 접근 방식
처음엔 한번에 모든 경우를 배열에 넣은 다음 조건을 통해 pop시키고 sum을 더해가면서 구하려고 했으나 시간초과가 발생했다.
처음에 첫 케이스를 받고 여러 조건들을 배정해서 첫 케이스의 숫자를 조정하는 방식으로 바꿔서 풀었다.
2. 내가 푼 코드
<시간 초과>
#시간 초과 코드
import sys
case = int(sys.stdin.readline())
arr=[]
for _ in range(case):
data=sys.stdin.readline().split()
arr.append((int(data[0]),int(data[1])))
sum = 0
for i in range(case-1):
if arr[i][0] < arr[i+1][0] and arr[i][1] > arr[i+1][1]:
arr.pop(i+1)
sum+=arr[len(arr)-1][1]-arr[0][0]
if len(arr) > 1:
for i in range(case-1):
if arr[i+1][0] > arr[i][1]:
sum-=arr[i+1][0] - arr[i][1]
print(sum)
<새로 푼 코드>
import sys
case = int(sys.stdin.readline())
arr=[]
n,m=map(int,sys.stdin.readline().split())
result = 0
for i in range(case-1):
newn, newm=map(int,sys.stdin.readline().split())
if newn == n:
m = newm
elif m >= newn and newm > m:
m = newm
elif newn > m:
result += (newn - m)
m = newm
print(m-n-result)
3. 결과 및 느낀점
여러 케이스가 존재할 때 첫 케이스를 변화시켜서 답을 도출해 낼 수 있다면
모든 케이스를 배열에 삽입하는 것보다 시간측면에서 효율적이다.
'[Boj문제풀이]' 카테고리의 다른 글
[Boj/백준] 5397 Python (0) | 2021.08.31 |
---|---|
[Boj/백준] 11899 Python (0) | 2021.08.30 |
[Boj/백준] 14247 Python (0) | 2021.08.28 |
[Boj/백준] 1105 Python (0) | 2021.08.27 |
[Boj/백준] 14241 Python (0) | 2021.08.26 |