22977 달팽이는 그늘에서 쉬고 싶다

Tairitsu·2022년 6월 22일
0

Problems

목록 보기
2/3
post-thumbnail

문제 링크
시계방향 순서로 꼭짓점들의 좌표가 주어지는 조형물에, 45도 각도로 빛이 입사했을 때 생기는 그림자의 길이의 합을 출력하는 문제이다.

기본적인 원리는 그림자를 적절히 변형해서 구하기 쉬운 형태로 만드는 것이다.

빨간색, 노란색, 초록색 선분들을 잘 옮겨 보면 결과적으로 축에 정사영한 것과 똑같은 결과가 되어 보라색 선분 길이의 2배가 그림자 길이의 총합이 된다. 정사각형을 잘 쪼개서 계단 모양으로 만들어도 그 둘레 길이는 바뀌지 않는 것과 비슷한 원리라고 볼 수 있다.
그림자는 x좌표가 감소할 때와 y좌표가 증가할 때 생기므로, 이를 체크하여 그 차이의 2배만큼을 총합에 더해주면 문제를 풀 수 있다.

import sys
input = sys.stdin.readline

N = int(input())
a = [list(map(int, input().split())) for _ in range(N)]

x = 0
for i in range(N-1):
    if i%2:
        l = a[i][0]-a[i+1][0]
        if l>0: x+=(2*l)
    else:
        l = a[i+1][1]-a[i][1]
        if l>0: x+=(2*l)
        
print(x)

발상 자체는 어려운 편이 아니지만, 발상으로 풀겠다는 생각을 하기가 쉽지 않아 보인다. 대회에서 나온다면 은근 까다로울듯...

profile
백준 문제풀이 정리용 / Pypy3

0개의 댓글