본문 바로가기
문제풀이/프로그래머스

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

by 그적 2023. 5. 10.

 

목차

  • 문제
  • 내가 푼 방법
  • 자바 코드
  • 결과 및 회고

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/12979

 

프로그래머스

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

programmers.co.kr


2. 내가 푼 방법

내가 생각한 핵심은 전파가 닿지 않는 빈 구간에 최대 전파가 몇 개가 필요할까였다.

따라서 start 변수와 end 변수를 통해 구간 길이를 구해 최대 전파인 2 * w + 1로 나눈 값을 더해주었고,

전파가 닿지 않는 구간이 있으면 안 되므로 나머지가 있는 경우에는 +1을 해주어야 했다.

if (start < end) {
    answer += ((end - start) / (2*w + 1));
    answer += ((end - start) % (2*w + 1) == 0) ? 0 : 1;
}

3. 자바 코드

깃허브 풀이 주소

https://github.com/geujeog/Programmers/blob/main/Solution_%EA%B8%B0%EC%A7%80%EA%B5%AD%EC%84%A4%EC%B9%98.java

class Solution {
    public int solution(int n, int[] stations, int w) {
        int answer = 0;
        
        int start = 0;
        int end = 0;
        
        for (int station : stations) {
            end = station - w - 1;
            
            if (start < end) {
                answer += ((end - start) / (2*w + 1));
                answer += ((end - start) % (2*w + 1) == 0) ? 0 : 1;
            }
            
            start = station + w;
        }
        
        end = n;
        
        if (start < end) {
            answer += ((end - start) / (2*w + 1));
            answer += ((end - start) % (2*w + 1) == 0) ? 0 : 1;
        }

        return answer;
    }
}

4. 결과 및 회고

처음에 start 변수와 end 변수 범위를 확인 안 해서 통과하지 못했는데, 코드에서 생길 수 있는 반례도 반드시 고민해보장.

 

댓글