[Boj문제풀이]

[Boj/백준] 15922 Python

ki7348 2021. 8. 29. 17:03

문제출처: https://www.acmicpc.net/problem/15922

 

15922번: 아우으 우아으이야!!

N개의 선분을 모두 그렸을 때, 수직선 위에 그어진 선분 길이의 총합을 출력한다아아어으잉에애야우아으아이아야아아아아아아이야!!!

www.acmicpc.net

 

 

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