| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- c#
- MySQL
- springboot
- 자바
- JPA
- Python
- SQL
- MVVM
- 3일컷
- level4
- WPF
- 씨샵
- 코테
- WSL
- 쿼리
- 백준
- delegate
- Spring Boot
- level2
- 닫기버튼
- 1931번
- 프로그래머스
- 스프링부트
- 보통2종
- level3
- 코딩테스트
- 일반화
- Java
- programmers
- 운전면허
- Today
- Total
욱꾸미의 주꾸미 발
[코딩테스트] 프로그래머스 - 기지국 설치(Java, Level3) 본문
안녕하세요.
와우 날씨가 정말 춥네요~
모두 감기 조심하시길 바랍니다.
이 문제는 +10점이나 주네요~
너무 기분좋습니다.
그렇다면 언제나 그렇듯 문제~코드~제가 생각한 로직 순으로 이어나가보겠습니다.
문제 만나보시죠~
https://school.programmers.co.kr/learn/courses/30/lessons/12979
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
다음은 제가 작성한 코드입니다.
class Solution {
public int solution(int n, int[] stations, int w) {
int answer = 0;
int w_=w*2+1;
int dif=0;
int div=0;
int rest=0;
dif=stations[0]-1-w;
if(dif>=0)
{
div=dif/w_;
rest=dif%w_;
if(rest>0)
answer=div+1;
else
answer=div;
}
for(int i=0;i<stations.length-1;i++)
{
dif=stations[i+1]-stations[i]-2*w-1;
if(dif>=0)
{
div=dif/w_;
rest=dif%w_;
if(rest>0)
answer+=div+1;
else
answer+=div;
}
}
if(stations.length>0)
{
dif=n-stations[stations.length-1]-w;
if(dif>=0)
{
div=dif/w_;
rest=dif%w_;
if(rest>0)
answer+=div+1;
else
answer+=div;
}
}
return answer;
}
}
다음은 제가 생각한 로직에 대한 설명입니다.
제가 생각한 로직은
범위별로 나누고자 했습니다.
case 1) 1번째 부터 특정 첫 번째 특정 범위 사이
case 2) 첫 번째 특정 범위 부터 두 번째 특정범위, 두 번째 특정 범위부터.. n번째 특정범위
case 3) n 번째 특정 범위부터 마지막 사이
이렇게 경우의 수를 나눴습니다.
다음은 해당 범위의 순수 빈 공간만을 구해보겠습니다.
case 1) 에서는 (0~ w...w위성) 이런 구조이기에 -w만큼 빼주고 위성도 빼 순수 빈공간만을 구하겠습니다.
case 2) 에서는 (시작점 위성w..w~~~w..w다음의 위성) 이런구조기에 -2*w와 -1을 해주겠습니다.
case 3) 에서는 (시작점 위성w..w~ 마지막) 구성이기에 -2를 해줬습니다.
그럼이제 빈공간에 위성을 꽂으면 됩니다.
가로수 심기랑 비슷하다고 생각하시면 쉬울 듯합니다.
w_인 간격은 위성+우측w+좌측w로 즉 2*w+1이 길이가 되겠습니다.
그럼이제 남은공간에 대해/w_로 계산하고 나머지가 있으면 +1을해주면 되겠습니다.
(+1은 나머지 공간은 겹치더라도 서로 통신을 위해 꽂아줘야 하기 때문입니다.)
네~ 이런 원리로 풀었습니다.
여전히 말로 설명하는건 어렵네요. 원래 말로 설명할 줄 알아야 진짜로 이해한거라는데..
오늘 코딩테스트는 여기까지입니다.
모두 좋은 하루 보내시길 바랍니다. :D
감사합니다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [코딩테스트] 프로그래머스 - 쿼드압축 후 개수 세기(Java, Level2) (0) | 2022.12.07 |
|---|---|
| [코딩테스트] 프로그래머스 - 성분으로 구분한 아이스크림 총 주문량(MySQL, Level2) (0) | 2022.12.06 |
| [코딩테스트] 프로그래머스 - 소수 찾기(Java, Level2) (0) | 2022.12.03 |
| [코딩테스트] 프로그래머스 - 숫자 게임(Java, Level3) (0) | 2022.12.03 |
| [코딩테스트] 프로그래머스 - 할인 행사(Java, Level2) (0) | 2022.11.22 |