본문 바로가기
프로그래머스/Python

[프로그래머스] 기지국 설치 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 10. 13.
728x90
반응형

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 전파를 전달해야 할 구간을 구하고 해당 구간에 최소한으로 설치할 기지국의 개수를 구여 모두 더해주면 된다. 각 구간별 설치할 기지국의 최소 개수를 구하여 더하는 결과를 반복하다가 마지막 기지국에서의 계산이 끝나 반복이 종료되면, 이후 남은 구간도 고려해야 한다.

하여 마지막에 제일 뒤쪽 남은 구간에 대한 기지국 설치 개수를 계산하여 더해주면 된다.

 

  1. 올림 함수인 ceil()를 사용하기 위해 math 모듈을 불러온다. import math
  2. 전파를 전달해야 할 구간의 시작 위치를 저장할 변수를 생성하고 처음 아파트 번호를 저장한다. start = 1
  3. 기지국이 설치된 아파트의 번호를 하나씩 불러오며 for i in stations
  4. 전파를 전달해야 할 구간의 마지막 위치를 저장한다. end = i - w
  5. 전파를 전달해야 할 구간의 아파트 개수를 한 기지국이 전달 가능한 전파 거리를 나눠주고 이를 올림 한 값만큼 해당 구간에 기지국을 설치해야 한다. answer += math.ceil((end - start) / (2 * w + 1))
  6. 다음 전파를 전달해야 할 구간의 시작 위치를 변경한다. start = i + w + 1
  7. 기지국이 설치된 위치를 모두 가져온 다음 마지막으로 시작 위치에서부터 끝까지 구간에 기지국을 설치할 개수를 더한다. answer += math.ceil((n + 1 - start) / (2 * w + 1))
반응형

3. 소스코드

import math

def solution(n, stations, w):
    answer = 0
    
    start = 1
    for i in stations:
        end = i - w
        answer += math.ceil((end - start) / (2 * w + 1))
        start = i + w + 1

    answer += math.ceil((n + 1 - start) / (2 * w + 1))
    
    return answer
728x90
반응형