풀이 과정

  1. 현재 위치가 이미 설치된 기지국 내에 있는지 검사.
    • 있다면, 현재 위치를 설치된 기지국 밖으로 바로 점프
  2. 현재 위치가 기지국 내에 있지 않다면
    • 현재 위치를 기지국의 가장 마지막 자리라고 생각하고 기지국 배치
    • 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

+ Recent posts