일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 키패드 누르기
- 스타트 택시
- 9095번
- SW Expert Academy
- 2020 카카오 인턴십
- 보석 쇼핑
- 수식 최대화
- 19238번
- 거울 설치
- SW ExpertAcademy
- python
- 어른 상어
- 미세먼지 안녕!
- 17144번
- HTML 기초
- QueryDSL 기초
- 빛의 경로 사이클
- 1038번
- 14499번
- 12865번
- 15686번
- 1789번
- 감소하는 수
- 프로그래머스
- 백준 알고리즘
- 베스트엘범
- 경주로 건설
- 파이썬
- 16234번
- 12869번
Archives
- Today
- Total
보물창고 블로그
SW Expert Academy 5650. [모의 SW 역량테스트] 핀볼 게임 본문
728x90
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
상당히 애를 먹었던 문제이다. 웜홀 구현에 애를 많이 먹었다. 해결한 코드는 아래와 같다.
from collections import deque
def solution(x, y, map1, portal, n):
global answer
dx = [-1, 0, 1, 0]
dy = [0, -1, 0, 1]
queue = deque()
for d in range(4):
queue.append([x+dx[d], y+dy[d], d, 0])
while queue:
x1, y1, d, count = queue.popleft()
if x1 == -1 or x1 == n or y1 == -1 or y1 == n:
if 2 * count + 1 > answer:
answer = 2 * count + 1
continue
elif x1 == x and y1 == y:
if count > answer:
answer = count
continue
elif map1[x1][y1] == -1:
if count > answer:
answer = count
continue
elif map1[x1][y1] == 1:
count += 1
if d == 1:
d = 0
elif d == 2:
d = 3
else:
d = (d + 2) % 4
elif map1[x1][y1] == 2:
count += 1
if d == 0:
d = 3
elif d == 1:
d = 2
else:
d = (d + 2) % 4
elif map1[x1][y1] == 3:
count += 1
if d == 0:
d = 1
elif d == 3:
d = 2
else:
d = (d + 2) % 4
elif map1[x1][y1] == 4:
count += 1
if d == 2:
d = 1
elif d == 3:
d = 0
else:
d = (d + 2) % 4
elif map1[x1][y1] == 5:
count += 1
d = (d + 2) % 4
elif map1[x1][y1] > 5:
for p in portal[map1[x1][y1]]:
if p != [x1, y1]:
x1 = p[0]
y1 = p[1]
break
queue.append([x1 + dx[d], y1 + dy[d], d, count])
t = int(input())
for test in range(1, t + 1):
n = int(input())
answer = 0
field = []
portal = {}
zeros = []
for i in range(n):
s = list(map(int, input().split()))
for j in range(n):
if s[j] == 0:
zeros.append((i, j))
elif 5 < s[j]:
if portal.get(s[j]) is None:
portal[s[j]] = [[i, j]]
else:
portal[s[j]].append([i, j])
field.append(s)
for p1 in zeros:
solution(p1[0], p1[1], field, portal, n)
print('#{} {}'.format(test, answer))
'알고리즘 풀이 > SW Expert Academy' 카테고리의 다른 글
SW Expert Academy 5644. [모의 SW 역량테스트] 무선 충전 (0) | 2020.03.10 |
---|---|
SW Expert Academy 5648. [모의 SW 역량테스트] 원자 소멸 시뮬레이션 (0) | 2020.03.10 |
SW Expert Academy 2115. [모의 SW 역량테스트] 벌꿀채취 (0) | 2020.03.04 |
SW Expert Academy 2112. [모의 SW 역량테스트] 보호 필름 (0) | 2020.03.04 |
SW Expert Academy 1953. [모의 SW 역량테스트] 탈주범 검거 (0) | 2020.03.04 |
Comments