일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 재귀함수
- 카카오
- 다익스트라
- 정렬
- 수학
- lambda
- 위클리 챌린지
- KAKAO BLIND RECRUITMENT
- 자바
- Set
- Zip
- 추석맞이 코딩챌린지
- heapq
- 파이썬
- programmers
- Re
- backjoon
- 동적 계획법
- divmod
- python
- 프로그래머스
- DateTime
- dfs
- 백준
- 그리디
- 이분탐색
- java
- BFS
- 정규식
- Combinations
Archives
- Today
- Total
상상쓰
[프로그래머스] 기둥과 보 설치 본문
https://programmers.co.kr/learn/courses/30/lessons/60061
기둥과 보를 설치할 수 있는지, 삭제할 수 있는지를 문제를 보고 조건을 잘 만들어 주면 된다.
삭제의 경우, (x, y) 를 삭제했을 때 주위의 좌표들도 조건에 맞아야 삭제할 수 있다.
(x, y) 를 삭제하려고 할 때, (x - 1, y + 1) 의 경우도 조건에 맞는지 비교를 해야하는데 이 부분을 놓쳐서 계속 실패했었다.
dic(dictionary) 를 이용하여 해당 좌표에 기둥이나 보가 설치되어 있으면 1, 그렇지 않으면 0 으로 dic 이 완성되면 dic[key] 가 1 인 key 값을 answer 에 넣어서 조건대로 정렬해주면 된다.
from collections import defaultdict
def solution(n, build_frame):
answer = []
dic = defaultdict(int)
for i in build_frame:
x, y, M, D = i
if D == 1:
if condition(dic, x, y, M):
dic[(x, y, M)] = 1
else:
if dic[(x, y, M)] == 1:
dic[(x, y, M)] = 0
for j in [(0, 0), (-1, 0), (0, -1), (1, 0), (0, 1), (-1, 1)]:
for k in range(2):
x_, y_ = x + j[0], y + j[1]
if dic[(x_, y_, k)] == 1:
if not condition(dic, x_, y_, k):
dic[(x, y, M)] = 1
break
if dic[(x, y, M)] == 1: break
for key in dic.keys():
if dic[key] == 1:
answer.append(list(key))
answer = sorted(answer, key = lambda x : (x[0], x[1], x[2]))
return answer
def condition(dic, x, y, M):
answer = False
if M == 0:
if y == 0 or dic[(x, y-1, 0)] == 1 or dic[(x-1, y, 1)] == 1 or dic[(x, y, 1)] == 1:
answer = True
else:
if dic[(x, y-1, 0)] == 1 or dic[(x+1, y-1, 0)] == 1 or (dic[(x-1, y, 1)] == 1 and dic[(x+1, y, 1)] == 1):
answer = True
return answer
print(solution(5, [[1, 0, 0, 1], [1, 1, 1, 1], [2, 1, 0, 1], [2, 2, 1, 1], [5, 0, 0, 1], [5, 1, 0, 1], [4, 2, 1, 1], [3, 2, 1, 1]])) # [[1, 0, 0], [1, 1, 1], [2, 1, 0], [2, 2, 1], [3, 2, 1], [4, 2, 1], [5, 0, 0], [5, 1, 0]]
'Coding Test' 카테고리의 다른 글
[백준] 신입 사원 (0) | 2021.06.06 |
---|---|
[백준] 잃어버린 괄호 (0) | 2021.06.05 |
[백준] 거스름돈 (0) | 2021.06.04 |
[백준] 회의실 배정 (0) | 2021.06.04 |
[프로그래머스] 길 찾기 게임 (0) | 2021.06.04 |
Comments