풀이 과정
- 현재 위치가 이미 설치된 기지국 내에 있는지 검사.
- 있다면, 현재 위치를 설치된 기지국 밖으로 바로 점프
- 현재 위치가 기지국 내에 있지 않다면
- 현재 위치를 기지국의 가장 마지막 자리라고 생각하고 기지국 배치
- w가 2라고 가정할때
- ■□★□□ => 현재 위치가 검은상자일때 별표에 기지국을 설치한다고 생각한다.
- 다음 위치는 현재 위치 + 2 * w + 1이 된다.
소스 코드
from collections import deque
def solution(n, stations, w):
answer = 0
stations = deque(stations)
x = 1
while x <= n:
# deque에 없는 경우 도달 불가능한 큰 수로 임의 설정
range_x1, range_x2 = int(10e9), int(10e9)
if stations:
range_x1 = stations[0]-w
range_x2 = stations[0]+w
if x >= range_x1 and x <= range_x2:
# 이미 설치된 기지국 안에 있는 경우, 기지국 밖으로 점프시켜줌.
x = range_x2 + 1
stations.popleft()
else: # 현재 위치에 기지국 놓아야 하는 경우
answer += 1
# 현재 위치가 기지국의 가장 왼쪽에 닿았을 때, 다음 위치는 2 * w + 1칸 뒤다.
x = x + (2 * w + 1)
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 3 ] 최고의 집합 (0) | 2021.07.26 |
---|---|
[ Lv 3 ] 야근 지수 (0) | 2021.07.25 |
[ Lv 3 ] 길 찾기 게임 (0) | 2021.07.24 |
[ Lv 3 ] 이중우선순위큐 (0) | 2021.07.23 |
[ Lv 3 ] N으로 표현 (0) | 2021.07.23 |