[프로그래머스] 기지국 설치 파이썬

FFTL:)·2021년 11월 25일
0

문제 - https://programmers.co.kr/learn/courses/30/lessons/12979

혼자 힘으로 풀어내지 못하여 검색을 했습니다. 이후 이해를 한 다음에 혼자서 다시 풀어본 문제입니다.

풀이

  • 이 문제는 처음에 설치되어 있는 기지국으로 인해 분단되어진 영역을 찾아내는 문제입니다.

  • 일단 주어진 stations 배열의 처음부터 끝까지 i와 i-1를 비교해서 두 기지국 사이의 영역의 크기와 갯수를 찾아냅니다.

  • 그리고 stations의 첫번째 기지국의 앞부분과, 마지막 기지국의 뒷부분의 크기도 찾아줍니다.

  • 찾아낸 영역들의 크기에 맞추어 필요한 기지국 갯수를 찾아주면 끝이납니다.

code

#영역에 필요한 기지국 개수를 찾는 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;

profile
생각하는 개발자가 되자!

0개의 댓글