프로그래머스

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

진철 2023. 2. 12. 22:31
728x90
반응형

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12979

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드를 작성하기 위한 순서는 다음과 같다.

1. 전파가 통하지 않는 구역만 확인하고 기지국의 전파 거리에 맞게 해당 구역에 설치해준다.

 

import math

def solution(n, stations, w):
    answer = 0
    now = 1 #1번부터 n번까지의 좌표를 사용하기 위해서 now의 값을 0이 아닌 1로 지정하였다.
    for i in stations:
        if i-w > now: #해당 기지국으로부터 왼쪽으로만 보았을 때, 전파가 닿지 않는 구역이 있다는 것이다.
            answer += math.ceil((i-w-now)/(w*2+1)) #1번
        now = i+w+1 #now 값을 증가시켜서 기지국의 오른쪽 전파 거리보다 한 칸 오른쪽으로 지정한다.
            
    if stations[-1]+w < n: #앞의 for문은 기지국으로부터 왼쪽만을 확인하는 코드이다. 따라서 오른쪽을 확인하는 것도 필요하다.
                           #오른쪽의 경우, 마지막 기지국으로부터 오른쪽만을 확인하면 된다.
        answer += math.ceil((n-stations[-1]-w)/(w*2+1))
            

    return answer

 

초기에는 0부터 n-1까지 좌표를 초기화하여 전파가 닿이는 지역은 1로 표시하고 그렇지 않으면 0으로 표시하였다.

해당 좌표에 0에 해당하는 구역을 비교하여 설치해야하는 기지국 갯수를 반환했는데, 역시 런타임 에러가 발생하였다.

(데이터 값이 크다 싶으면 이중 for문 사용하지 말아야겠다 ㅠㅠ 제발 ㅠㅠ)

(그래도 지우긴 아까워서 아래에 첨부하겠습니당. 혹시나 참고하세용)

 

import math

def solution(n, stations, w):
    answer = 0
    pyo=[0 for _ in range(n)]
    no=[]
    for i in stations:
        if i<=w:
            for j in range(0, w+i, 1):
                pyo[j]+=1
        elif i+w>n:
            for j in range(i-w-1, n, 1):
                pyo[j]+=1
        else:
            for j in range(i-w-1, w+i, 1):
                pyo[j]+=1
    temp=[]
    for i in range(len(pyo)):
        if pyo[i]==0:
            temp.append(i)
        else:
            if temp:
                no.append(temp)
                temp=[]
    if temp:
        no.append(temp)
        
    for i in no:
        answer+=math.ceil(len(i)/(2*w+1))
    return answer
728x90
반응형