https://programmers.co.kr/learn/courses/30/lessons/12979
전체 아파트들을 순회하는것은 불가능하다고 생각하면 된다.
문제에서 첫번째 아이디어는, 기지국을 통해 중간중간 설치가 필요한 구간을 구하는것이다.
이후, 각 station에서 w+1만큼 뺀 길이로 구간을 구하면 된다.
1. 첫번째 station과 1번집 사이에서 구간 생기는지
2. station사이사이에서 각각의 구간길이 구하기
3. 마지막 station과 N번째 집 사이에 구간이 생기는지
이후, 각각 구간 길이를 2w+1만큼 나눠서 올림처리 해주어 더하면 answer가 완성된다.
첫번째 풀이
def solution(n, stations, w):
answer=0
segs=[]
for i,v in enumerate(stations):
if i==0: #처음
segs.append(v-w-1)
else: # 중간
segs.append(v-w-1-(stations[i-1]+w))
if stations[-1]+w < n : #마지막
segs.append(n-(stations[-1]+w))
for seg in segs:
if seg%(2*w+1)==0:
answer += seg//(2*w+1)
else:
answer += seg//(2*w+1)+1
return answer
solution(N,stations,w)
굳이, Segs를 또 순회할 필요가 없다고 생각되었다.
그리하여 한번에 처리해버리도록 다시 코드를 짰다
def solution(n, stations, w):
def getneeds(seg):
if seg%(2*w+1)==0:
return seg//(2*w+1)
else:
return seg//(2*w+1)+1
answer=0
for i,v in enumerate(stations):
if i==0: #처음
answer+=getneeds(v-w-1)
else: # 중간
answer+=getneeds((v-w-1-(stations[i-1]+w)))
if stations[-1]+w < n : #마지막
answer+= getneeds(n-(stations[-1]+w))
return answer
solution(N,stations,w)
'CODING TEST > Programmers' 카테고리의 다른 글
Python 프로그래머스 디스크컨트롤러 힙 (0) | 2021.07.06 |
---|---|
Programmers Summer/Winter Coding(~2018)소수 만들기 파이썬 (0) | 2021.06.19 |
파이썬 Python KAKAO_2018 프렌즈 4블록 (0) | 2021.06.15 |
프로그래머스 카카오블라인드 1차 뉴스클러스터링 (python) (0) | 2021.06.13 |
N진수 게임 (Python) (0) | 2021.06.13 |