문제

 

www.acmicpc.net/problem/2170

 

2170번: 선 긋기

첫째 줄에 선을 그은 횟수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y(-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다.

www.acmicpc.net

 

처음 작성한 코드

import sys

N = int(sys.stdin.readline())
line = []
for i in range(N):
    x, y = map(int, sys.stdin.readline().split())
    line.append((x, y))
line.sort(key=lambda x:x[0])

# 현재를 기준으로 그려진 선의 시작점(선의 시작)과 끝점(선의 끝)
s = line[0][0]
e = line[0][1]

result = e - s

for i in range(1, N):
    if line[i][0] <= e and line[i][1] <= e: # 현재 그은 선이 전에 그은 선에 완전히 겹칠때
        continue

    if line[i][0] <= e <= line[i][1]: # 일부만 겹칠때, 겹친부분 빼주기
        result += (line[i][1]-line[i][0]) -(e - line[i][0])
        e = line[i][1]
        s = line[i-1][0]
    else:
        result += line[i][1]-line[i][0]
        e = line[i][1]
        s = line[i][0]

print(result)

 

깨달은 점

  • 처음에 조건을 일부 겹치는 때만 생각을 해서 코드를 짰는데 틀렸다고 나왔다.. 두번째는 현재 선이 이전 선과 완전히 겹쳐서 더하지 않아도 될때를 찾았는데도 틀렸다고 나왔다.. 왜냐면 s, e같은 시작, 끝점을 따로 안두고 바로 앞 i-1번째와 비교를 했기 때문이다.. 사람들은 너무 똑똑하다..

'Baekjoon' 카테고리의 다른 글

[백준 1446] 지름길  (0) 2021.03.16
[백준 4963] 섬의 개수  (0) 2021.03.13
[백준 1744] 수 묶기  (0) 2021.03.07
[백준 2668] 숫자고르기  (0) 2021.03.06
[백준 14719] 빗물  (0) 2021.03.06