일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코딩테스트
- Brute Force
- 힙
- 완전탐색
- binary search
- Greedy
- 큐
- Algorithm
- heap
- string
- 백준
- 그래프
- 동적계획법
- 정렬
- Queue
- 탐욕법
- DVWA
- DFS
- graph
- Code Refactoring
- DP
- Dynamic Programming
- 카카오 기출
- programmers
- 알고리즘
- sort
- 문자열
- 프로그래머스
- BFS
- django
Archives
- Today
- Total
생각과 고민이 담긴 코드
프로그래머스 - 기지국 설치 (Summer / Winter Coding ~ 2018) / Level 3 본문
Algorithm/프로그래머스
프로그래머스 - 기지국 설치 (Summer / Winter Coding ~ 2018) / Level 3
0_Hun 2021. 11. 19. 16:57문제 : https://programmers.co.kr/learn/courses/30/lessons/12979
코딩테스트 연습 - 기지국 설치
N개의 아파트가 일렬로 쭉 늘어서 있습니다. 이 중에서 일부 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 기술이 발전해 5g 수요가 높아져 4g 기지국을 5g 기지국으로 바꾸려 합니다. 그런데 5
programmers.co.kr
풀이
from math import ceil
def solution(n, stations, w):
answer = 0
for i in range(len(stations)+1):
if i == 0: # 첫 아파트부터 첫번째 station까지의 구간
answer += ceil((stations[i]-w-1) / (2*w+1))
elif i == len(stations): # 마지막 station부터 마지막 아파트까지의 구간
answer += ceil((n-stations[i-1]-w) / (2*w+1))
else: # station과 station 사이.
answer += ceil((stations[i] - stations[i-1] - (2*w) - 1) / (2*w+1))
return answer
문제 제한조건을 보면 n의 최대 크기가 2억이다.
따라서 O(n)의 시간복잡도여도 전체 구간을 한 바퀴 탐색하기 힘들다.
따라서 처음엔 시간복잡도가 O(logn)인 이분 탐색을 떠올렸다.
그러나 문제에 대해 잘 고민해보면 n를 탐색하지 않고도 stations 배열만 탐색해도 문제를 풀 수 있다.
0~stations[0] / stations[i-1]~stations[i] / stations[len(station)+1]~n
위와 같이 3가지 경우의 수에 대하여 최소 기지국 수가 나오도록 계산식을 도출해내면
계산을 통해 stations (최대 길이 10,000 )배열만 탐색해도 문제를 해결할 수 있다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 숫자 문자열과 영단어 (2021 카카오 채용연계 인턴십) / Level 1 (0) | 2021.12.05 |
---|---|
프로그래머스 - 로또의 최고 순위와 최저 순위 (2021 Dev-Matching 웹백엔드) / Level 1 (0) | 2021.12.04 |
프로그래머스 - 스킬트리 (Summer / Winter Coding ~2018) / Level 2 (0) | 2021.11.18 |
프로그래머스 - 뉴스 클러스터링 (2018 KAKAO 블라인드 채용) / Level 2 (0) | 2021.11.12 |
프로그래머스 - 괄호 변환 (2020 KAKAO 블라인드 채용) / Level 2 (0) | 2021.11.10 |