알고리즘/프로그래머스
[프로그래머스] 기지국 설치 by 파이썬 (Python)
코딩하는이씨
2023. 8. 12. 21:45
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12979
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
난이도
LV 3
문제 설명
아파트 N개가 주어지고 아파트 옥상에 기지국이 설치되어있다.
해당 기지국의 범위가 w로 변경되면서 기지국을 추가로 설치해야하는데, 이때 최소로 설치하는 기지국의 개수를 return해줘야한다.
기지국 설치 아파트기준으로 양쪽으로 w만큼 전달 할 수 있다.
ex_) 만약 4번 아파트에 w가 2라면 2,3,4,5,6 번의 아파트를 해당 기지국으로 커버할 수 있다.
접근법
모든 아파트 n번을 탐색하기에 주어지는 N이 200,000,000이하의 자연수 이므로 효율성에서 시간초과가 발생한다.
따라서 기존에 설치된 기지국이 주어지는 번호 기준으로 기존 기지국이 커버할 수 있는 아파트 (양쪽으로 w만큼)을 제외해고 w*2+1로 나누어 주면 해당 범위 사이에 기지국이 몇개 설치 되야하는지 알 수 있다.
이때 모든 아파트가 기지국범위 안에 들어가야하기 때문에 math.ceil을 이용해서 올림을 해주면 해당 범위 사이에 필수적으로 필요한 기지국의 개수를 알 수 있다.
마지막 기지국으로부터 아파트의 끝까지 추가로 기지국이 필요한 개수를 확인후 값을 return해주면 된다.
코드
import math
def solution(n, stations, w):
answer = 0
idx = 1
for s in stations:
answer += math.ceil(((s-w) - idx) / ((w*2)+1))
idx = s+w+1
answer += math.ceil((n+1 - idx) / ((w*2)+1))
return answer
728x90
반응형