[카카오][Python3] 리틀 프렌즈 사천성
2018. 8. 2. 22:35 |
프로그래밍/기타
2017년 카카오 코드 페스티벌 본선 3번 문제를 풀어보았다. 문제를 제대로 읽지 않았더니 다 풀어놓고도 계속 틀렸다는... 주어진 모든 알파벳 문자를 제거하지 못하고 1개라도 남으면 IMPOSSIBLE 이라는 점을 주의해야 한다.
참고 : http://tech.kakao.com/2017/09/14/code-festival-round-2/
입력은 위 문제와 조금 다르게 한줄씩 들어오는 기준이다.
예제 입력 :
4 4
.ZI.
M.**
MZU.
.IU.
#!/usr/bin/env python3
def find_route(m1, n1, m2, n2, c):
up, down, left, right = check_edges(m1, n1, m2, n2, c)
case = (m1-m2)*(n1-n2)
if case == 0:
return (m1 == m2 and up) or (n1 == n2 and left)
elif case > 0:
return (up and right) or (down and left)
else:
return (up and left) or (down and right)
def check_edges(m1, n1, m2, n2, c):
up, down, left, right = [True]*4
for i in range(min(n1, n2), max(n1, n2)+1):
if matrix[min(m1, m2)][i] not in ('.', c):
up = False
break
for i in range(min(n1, n2), max(n1, n2)+1):
if matrix[max(m1, m2)][i] not in ('.', c):
down = False
break
for i in range(min(m1, m2), max(m1, m2)+1):
if matrix[i][min(n1, n2)] not in ('.', c):
left = False
break
for i in range(min(m1, m2), max(m1, m2)+1):
if matrix[i][max(n1, n2)] not in ('.', c):
right = False
break
return up, down, left, right
m, n = map(int, input().split())
matrix = []
coordinates = {}
for i in range(m):
row = list(input())
matrix.append(row)
for j in range(n):
c = row[j]
if c.isupper():
coordinates.setdefault(c, []).append((i, j))
result = []
friends = sorted(coordinates)
i = 0
while i < len(friends):
c = friends[i]
if c in result or c == '.':
i += 1
continue
(m1, n1), (m2, n2) = coordinates[c]
if find_route(m1, n1, m2, n2, c):
result.append(c)
friends[i] = '.'
matrix[m1][n1] = '.'
matrix[m2][n2] = '.'
i = 0
continue
i += 1
if len(result) == len(friends):
print(''.join(result))
else:
print('IMPOSSIBLE')
'프로그래밍 > 기타' 카테고리의 다른 글
| python-ldap Windows Active Directory unicodePwd userAccountControl DSID-031A120C (0) | 2018.12.20 |
|---|---|
| 티스토리 블로그 SSL(TLS) www <-> non-www 상호 전환 Javascript (7) | 2018.09.08 |
| [Python3] Permutation (순열) (2) | 2018.08.04 |
| [Python3] QuickSort (퀵 정렬) (0) | 2018.08.03 |
| [카카오][Python3] 단체사진 찍기 (0) | 2018.08.01 |
| [Python3] Merge Sort (병합 정렬) (0) | 2018.07.14 |
| Flask에서 No-Cache 헤더 설정 (0) | 2018.05.29 |
| [Python3] a^3 + b^3 = c^3 + d^3 을 만족하는 자연수 1000 이하의 조합 (0) | 2018.05.24 |
최근에 달린 댓글 최근에 달린 댓글