Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스프링
- HTTP API
- 백준
- 2589
- 쓰레드 풀
- 2020 KAKAO BLIND
- Spring
- mvc
- 서블릿
- 맛집
- 동적 프로그래밍
- 문자열 압축
- 호유동
- 양꼬치
- 맛집 투어
- 설탕 배달
- 포두부 보쌈
- 프로그래머스
- 2839
- dp
- 투어
- BFS
- 1로 만들기
- Servlet
- 다이나믹 프로그래밍
- 스프링 MVC
- 고모네 콩탕
- 알고리즘
- 완도산회
- 2638
Archives
- Today
- Total
프로그래밍 공방
[프로그래머스] 외벽 점검 본문
문제
programmers.co.kr/learn/courses/30/lessons/60062
코딩테스트 연습 - 외벽 점검
레스토랑을 운영하고 있는 스카피는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하는
programmers.co.kr
문제해결방법
레스토랑이 원형 구조라는 것은 weak의 시작점에 따라 결과가 달라질 수 있다는 것을 나타낸다.
따라서 weak의 시작점을 정하고 친구들을 조합하는 모든 경우에 대하여 외벽을 점검할 수 있는지 확인하고
가능한 경우들에 대해 친구의 최소값을 구한다.
코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package Programmers; public class Solution_외벽점검 { public static int min = Integer.MAX_VALUE; public static boolean[] v; public static int[] rweak, friendDist; public static boolean check(int s, int e, int friend) { int index = s; int sum = 0; for(int i=0; i<friend; i++) { int dis = friendDist[i]; int start = rweak[index]; sum = 0; for(; index<e; index++) { sum += rweak[index]-start; start = rweak[index]; if(sum>dis) break; } if(index==e) return true; } return false; } public static void dfs(int s, int e, int friend, int count, int[] dist) { if(count>=friend) { if(check(s, e, friend) && min>friend) min = friend; return; } for(int i=0; i<friendDist.length; i++) { if(v[i]==false) { v[i] = true; friendDist[count]=dist[i]; dfs(s, e, friend, count+1, dist); v[i] = false; } } } public static int solution(int n, int[] weak, int[] dist) { int answer = 0; rweak = new int[weak.length*2]; friendDist = new int[dist.length]; v = new boolean[dist.length]; for(int i=0; i<weak.length; i++) { rweak[i] = weak[i]; rweak[i+weak.length] = weak[i]+n; } for(int i=0; i<weak.length; i++) { for(int j=1; j<=dist.length; j++) { dfs(i, i+weak.length, j, 0, dist); } } answer = min; if(answer == Integer.MAX_VALUE) answer = -1; return answer; } public static void main(String[] args) { int n = 12; int[] weak = {1, 5, 6, 10}; int[] dist = {1, 2, 3, 4}; System.out.println(solution(n, weak, dist)); } } | cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[프로그래머스] 순위 검색 (0) | 2021.02.04 |
---|---|
[백준] 14425번 : 문자열 집합 (0) | 2021.02.02 |
[프로그래머스] 광고 삽입 (5) | 2021.01.27 |
[백준] 1238번 : 파티 (0) | 2021.01.27 |
[프로그래머스] 신규 아이디 추천 (0) | 2021.01.27 |