알고리즘 공부/파이썬(Python)

백준 10158번 개미 파이썬

마달랭 2024. 6. 28. 03:31
반응형

리뷰

처음엔 dx, dy를 통해 while루프를 돌려 주었는데 시간 제한이 0.15초인걸 보지 못했다. 결과는 시간 초과 엔딩, 시간 초과를 어떻게 벗어날지에 대해 생각 하다가 결국 조언을 받게 되었다. 구현 문제는 너무 어려운 것 같다.

문제 풀이

  1. 시간에 지남에 따라 x, y좌표를 따로 구해준다.
  2. 시작 좌표에 시간 값을 더해준 후 가로 세로 넓이의 2배로 나눈 나머지가 최종 좌표의 위치가 된다.
  3. 예를 들어 c가 6이고 p가 3일때 t가 12라면 p + t는 15가 될 것이고 c의 두배인 12로 나눈 나머지는 3이 되므로 최종 x좌표는 3이 되는 것이다.
  4. 단, 위와 동일한 케이스 중 t가 6이라면 p가 9가 되어 가로 사이즈를 초과하게 된다. 이는 벽에 반사된 상태로 생각하면 된다. 즉 c의 두배인 12에서 9를 빼주면 3이 된다.

참고 사항

while을 통해 해결하려고 몇시간 끙끙 앓았지만 현재 코드가 가장 시간 복잡도나 코드 길이 면에서 최적화 된 코드인 것 같다.

정답 코드

def q10158():
    # 백준 10158번 개미 파이썬
    c, r = map(int, input().split())
    p, q = map(int, input().split())
    t = int(input())

    x = (p + t) % (2 * c)
    y = (q + t) % (2 * r)

    if x > c:
        x = 2 * c - x
    if y > r:
        y = 2 * r - y

    print(x, y)
q10158()

 

728x90
반응형