Koala - 17기/코딩테스트 심화 스터디

[백준/Python] #30648 트릭플라워

영찬_ 2025. 1. 26. 19:26

https://www.acmicpc.net/problem/30648

알고리즘

한 좌표에 두송이의 꽃이 피어있게 되는 시간을 구하는 문제이다.

우리가 기억해야 할것은 

  • 다음 꽃이 필 자리에 꽃이 존재하는가
  • 현재 꽃이 핀 위치와 다음에 꽃이 필 위치

를 기억해주고, 반복문을 통해 시간을 구해주는 방식으로 코드를 구성하였다.해당 좌표에 꽃이 있는지 확인할 배열, 다음 꽃이 필 위치 좌표 변수를 통해 해당 위치에 꽃이 존재했다면 반복문을 종료하고 시간을 출력해주었다.해당 위치에 꽃이 존재하지 않았다면 다음 꽃이 필 좌표를 계산해주는데, x+y+2가 r보다 작으면 다음 꽃이 필 위치는 x+1, y+1이고

x+y+2가 r보다 크면 다음 꽃이 필 위치는 x%2, y%2이고, 소수점은 버리므로 //로 정수형을 만들어준다.

코드

import sys
input = sys.stdin.readline

a,b = map(int,input().split())
r = int(input())

time = 0
arr = [[0 for _ in range(r)] for i in range(r)]

next_y = a
next_x = b

while True:
    arr[next_y][next_x] += 1
    if arr[next_y][next_x] > 1:
        break

    if (next_x+next_y+2) < r:
        next_x = next_x + 1
        next_y = next_y + 1
    else:
        next_x = next_x // 2
        next_y = next_y // 2
    time += 1

print(time)