문제 - https://programmers.co.kr/learn/courses/30/lessons/12979
혼자 힘으로 풀어내지 못하여 검색을 했습니다. 이후 이해를 한 다음에 혼자서 다시 풀어본 문제입니다.
이 문제는 처음에 설치되어 있는 기지국으로 인해 분단되어진 영역을 찾아내는 문제입니다.
일단 주어진 stations 배열의 처음부터 끝까지 i와 i-1를 비교해서 두 기지국 사이의 영역의 크기와 갯수를 찾아냅니다.
그리고 stations의 첫번째 기지국의 앞부분과, 마지막 기지국의 뒷부분의 크기도 찾아줍니다.
찾아낸 영역들의 크기에 맞추어 필요한 기지국 갯수를 찾아주면 끝이납니다.
#영역에 필요한 기지국 개수를 찾는 check 입니다.
def check(n, ran):
#영역이 0보다 작으면 0을 반환하고 아니라면
#영역을 기지국 크기만큼 나누어 기지국 개수를 구해주어 반환합니다.
if n <= 0:
return 0;
else:
a = n // ran;
b = n % ran;
if b>0:
return a+1;
else:
return a;
def solution(n, stations, w):
answer = 0;
data = [];
#기지국과 기지국 사이사이의 영역을 찾아 data에 담아줍니다.
for i in range(1, len(stations)):
#문제를 풀 때에 1번 코드를 했었는데 자꾸 몇개의 테스트 케이스가 틀리다고 나왔다.
#도저히 방법을 모르겠어서 코드나 좀 정리하자고 생각해서 2번 처럼 바꾸고 하니 정답이 되었다.
#1번과 2번이 어떻게 다른건지는 이해가 가지 않는다.. 아시는분 댓글좀..
###1
# n = (stations[i]-w-1) - (stations[i-1]+w);
# data.append(n);
###2
data.append((stations[i]-w-1) - (stations[i-1]+w));
#첫번째 기지국의 앞부분의 영역과 마지막 기지국의 뒷부분 영역을 찾아 data에 담아줍니다.
data.append(stations[0]-w-1);
data.append(n - (stations[-1] + w));
ran = w*2+1;
#check를 통해서 필요한 기지국 개수를 찾아 더해줍니다.
for d in data:
answer += check(d, ran);
return answer;