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 | 29 | 30 |
Tags
- 2018 KAKAO BLIND RECRUITMENT
- 플로이드와샬
- 브루트포스
- 우선순위큐
- 프로그래머스
- 조합
- 2019 KAKAO BLIND RECRUITMENT
- GIT
- SWEA
- 크루스칼
- 로봇 청소기
- Spring
- 비트마스킹
- 이분탐색
- 2020 카카오 인턴십
- 투 포인터
- 2021 KAKAO BLIND RECRUITMENT
- BFS
- 최소 신장 트리
- 구현
- 투포인터
- 스택
- 트라이
- 시뮬레이션
- 다익스트라
- 파이썬
- 2020 KAKAO BLIND RECRUITMENT
- 백트래킹
- 플로이드 와샬
- 백준
Archives
- Today
- Total
개발조아
[프로그래머스] 외벽 점검 파이썬 본문
728x90
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/60062
그리디하게 dist를 정렬해서 가장 긴 것 부터 풀면 되지 않을까 했다가 계속 틀렸던 문제이다.
weak = [0,10,30,50,100,120]
dist = [5,10,50,100]
이 경우 답은 1이다
weak가 100인 점에서 길이가 100인 친구가 돌면 된다.
그래서 브루트포스로 해결하였다.
dist의 순서를 섞고 0번째부터 그 순서대로 다 돌려보면서 가장 작은 것을 찾도록 했다.
dist 순서대로 weak의 첫번째 부터 시계방향으로 확인하는데 dist의 값 이내에 weak인 구역의 개수를 세고, 최대 길이이거나 이미 탐색한 구역이라면 그 지점부터 dist로 확인하였다.
dist 순서대로 진행하다가 남은 weak가 없다면 그때의 개수를 정답과 체크해서 해결했다.
from itertools import permutations
INF = 9876543210
def solution(input_n, input_weak, input_dist):
global answer, dist, weak, n, m
n = input_n
weak = input_weak
dist = input_dist
m = len(weak)
answer = INF
remain = len(weak)
for order in permutations(dist,len(dist)):
for start in range(m):
visited = [False]*n
check_weak(start, 0, order, visited, 0, remain)
return answer if answer != INF else -1
def check_weak(start, now, order, visited, ans, remain):
global answer
if ans >= answer:
return
if remain == 0:
answer = min(answer, ans)
return
if now == len(order):
return
w = weak[start]
visited[w] = True
cnt = 1
end = start
for _ in range(m):
end = (end+1)%m
if not is_possible(w,weak[end],order[now]) or visited[weak[end]]:
break
else:
visited[weak[end]] = True
cnt += 1
check_weak(end,now+1,order,visited,ans+1,remain-cnt)
def is_possible(start,end,max_dist):
if end - start < 0:
if n - start + end <= max_dist:
return True
else:
return False
else:
if end - start <= max_dist:
return True
else:
return False
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 길 찾기 게임 파이썬 (1) | 2021.09.04 |
---|---|
[프로그래머스] 블록 이동하기 파이썬 (0) | 2021.09.04 |
[프로그래머스] 가사 검색 파이썬 (0) | 2021.09.02 |
[프로그래머스] 자물쇠와 열쇠 파이썬 (0) | 2021.09.02 |
[프로그래머스] 광고 삽입 파이썬 (0) | 2021.08.26 |
Comments