📌 LeetCode [2582]: Pass the Pillow
🔗 문제 링크
문제 설명 📄
( n )명의 사람이 원형으로 둘러앉아 있습니다. 초기에는 첫 번째 사람이 베개를 가지고 있으며, 매 초마다 베개를 좌우로 전달합니다.
- ( time )초가 지났을 때, 베개를 가진 사람의 번호를 반환하세요.
조건:
- ( 2 <= n <= 1000 )
- ( 1 <= time <= 1000 )
문제 접근 방식 📋
- 방향 전환:
- 베개를 왼쪽(역방향)으로 전달할지 오른쪽(정방향)으로 전달할지 결정합니다.
- 베개가 첫 번째 사람이나 ( n )번째 사람에게 도달하면 방향을 전환합니다.
- 반복 시뮬레이션:
- ( time )초 동안 각 사람에게 베개를 전달하며, 매번 방향에 따라 번호를 증가/감소시킵니다.
Solution 💻
class Solution:
def passThePillow(self, n: int, time: int) -> int:
dir = True
answer = 1
while time > 0:
if dir:
answer += 1
else:
answer -= 1
if answer == n or answer == 1:
dir = not dir
time -= 1
return answer
시간 복잡도 분석 ⏲️
- 시간 복잡도: ( O(time) )
- ( time )만큼 반복하므로 시간은 ( time )에 선형적으로 비례.
- 공간 복잡도: ( O(1) )
- 상수 크기의 변수만 사용.
리팩토링 🛠️
개선된 코드
class Solution:
def passThePillow(self, n: int, time: int) -> int:
cicle = time // (n-1)
time %= (n-1)
if cicle % 2 == 0:
return 1 + time
else:
return n - time
리팩토링 후 시간 복잡도 ⏲️
- 시간 복잡도: ( O(1) )
- 반복문 없이 계산만 수행.
- 공간 복잡도: ( O(1) ).
'알고리즘 > 리트코드' 카테고리의 다른 글
LeetCode [1460]: Make Two Arrays Equal by Reversing Subarrays (1) | 2024.12.08 |
---|---|
LeetCode [1518]: Water Bottles (1) | 2024.12.08 |
LeetCode [706]: Design HashMap (1) | 2024.12.07 |
LeetCode [1539]: Kth Missing Positive Number (0) | 2024.12.07 |
LeetCode [860]: Lemonade Change (0) | 2024.12.06 |