본문 바로가기

알고리즘/백준

[백준 / 투 포인터] 1306 : 달려라 홍준 (python)

728x90

풀이

import sys

input = sys.stdin.readline
N, M = map(int, input().split())
A = list(map(int, input().split()))
strong = 0
answer = []

# 시야 초기 max 값 설정
strong = max(A[:M*2-1])

answer.append(strong)

i, j = 1, M*2-1

while j != N:
    if strong != A[i-1]:
        if strong < A[j]:
            strong = A[j]
    else:
        strong = max(A[i:j+1])
    answer.append(strong)

    i+=1
    j+=1

print(*answer)

 

  • 정답은 strong 배열에 저장했고, 시간(1초)마다 보이는 홍준의 시야에서 가장 큰 불빛은 strong 변수에 넣었다.
  • i, j는 A 배열을 가리키는 포인터이다. i~j까지가 홍준의 시야 범위이다.
  • 1초마다 i와 j를 +1해주며 그 시점에서 가장 강한 불빛을 찾아 strong에 저장한다.
    이때, i-1번째 불빛이 가장 강했다면 현재 가장 강한 불빛을 다시 찾아야하므로 max 함수와 슬라이싱을 사용하여 strong을 찾았다.
    i-1이 strong이 아니라면 아직 홍준의 시야 범위 내에 있는 다른 불빛이 가장 강했다는 뜻이므로 strong과 시야에 새로 들어온 A[j] 불빛을 비교하여 큰 불빛을 strong 변수에 넣어준다.
  • while 반복문은 전체 배열 범위를 넘어서기 전까지 반복한다.
  • *answer을 사용하여 배열을 괄호없이 출력한다.

 

 

반응형