문제를 보고 한 번 자를 때마다 모든 케이스를 다 탐색하는, 지수 함수 복잡도의 경우밖에는 생각나지 않아서 풀이를 참고했다. 정말 간결하고 직관적인 풀이였다.
def divide():
left, right = 0, N // 2
while left <= right:
row_cut = (left + right) // 2
col_cut = N - row_cut
pieces = (row_cut + 1) * (col_cut + 1)
if K == pieces:
return True
elif K > pieces:
left = row_cut + 1
else:
right = row_cut - 1
return False
if __name__ == "__main__":
N, K = map(int, input().split())
print("YES") if divide() else print("NO")
'알고리즘' 카테고리의 다른 글
[백준/파이썬] #1477 (0) | 2025.06.02 |
---|---|
[백준/파이썬] #2412 (0) | 2025.05.29 |
[백준/파이썬] #13023 (0) | 2025.05.25 |
[백준/파이썬] #17836 (0) | 2025.05.20 |
[백준/파이썬] #2469 (0) | 2025.05.18 |