![[프로그래머스] 기지국 설치 (python)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb90qK2%2FbtsHRHd87PT%2FKhKMaHHVOhYRqORfyY1Zh1%2Fimg.jpg)
https://school.programmers.co.kr/learn/courses/30/lessons/12979
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
일단 그림을 보면 기지국에 따라 공간이 나뉘는 것을 볼 수 있다. w가 2인 경우에 5칸을 기지국 하나가 커버할 수 있다는 뜻이다.
이걸 일반화 하면, 기지국에서 나오는 전파의 도달거리 w는 w * 2 + 1 크기 만큼 커버할 수 있다.
각 구간 별로 커버하지 못 하는 구간들에 기지국이 몇 개 커버 가능한지 계산해주면 해결할 수 있다.
Phase 1
첫 번째 아파트부터 마지막 기지국이 커버하는 곳까지의 기지국 수를 구한다.
길이와 커버리지가 주어졌을 때 필요한 기지국 수를 계산하는 식은
$$(length + coverage - 1) \space // \space coverage$$
이다.
Phase 2
마지막 기지국이 커버하지 못 하는 곳이 있다면 추가해준다.
각 Phase 별로 구현된 코드는 아래와 같다.
def solution(n, stations, w):
answer = 0
coverage = 2 * w + 1
# Phase 1: [1번 아파트 옥상]부터 [마지막 기지국 커버리지 옥상]까지
start = 1
for station in stations:
left, right = station - w, station + w
# 현재 기지국의 왼쪽 범위 바깥에 전파가 미치지 않는 구간이 있다면,
# 그 구간의 길이를 계산하고 필요한 추가 기지국의 수를 구함
if start < left:
length = left - start
answer += (length + coverage - 1) // coverage # 필요한 기지국 수 계산 식
# start 초기화
start = right + 1
# Phase 2: [마지막 기지국 커버리지 옥상]이 커버하지 못 하는 곳이 있다면 추가
# start가 위에 있는 for문에서 초기화 되므로 바로 n과 비교해도 됨
if start <= n:
length = n - start + 1
answer += (length + coverage - 1) // coverage
return answer
references
https://school.programmers.co.kr/learn/courses/30/lessons/12979
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'CSE > 알고리즘 (algorithm)' 카테고리의 다른 글
[프로그래머스] 구명보트 (python) (0) | 2024.06.11 |
---|---|
[프로그래머스] 스킬트리 (python) (0) | 2024.06.11 |
[프로그래머스] 예상 대진표 (python) (1) | 2024.06.09 |
[프로그래머스] 땅따먹기 (python) (0) | 2024.06.08 |
[프로그래머스] 숫자의 표현 (python) (0) | 2024.06.07 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!