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 | 31 |
Tags
- 최소 신장 트리
- 2019 KAKAO BLIND RECRUITMENT
- 시뮬레이션
- 2020 카카오 인턴십
- 프로그래머스
- 크루스칼
- 조합
- 구현
- 플로이드와샬
- Spring
- 다익스트라
- 백트래킹
- 플로이드 와샬
- SWEA
- BFS
- 우선순위큐
- 백준
- 2020 KAKAO BLIND RECRUITMENT
- 로봇 청소기
- 투포인터
- GIT
- 비트마스킹
- 스택
- 파이썬
- 2018 KAKAO BLIND RECRUITMENT
- 이분탐색
- 트라이
- 브루트포스
- 투 포인터
- 2021 KAKAO BLIND RECRUITMENT
Archives
- Today
- Total
개발조아
[SWEA] 2819 격자판의 숫자 이어 붙이기 파이썬 본문
728x90
문제 링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7I5fgqEogDFAXB
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
모든 점에서 BFS를 돌리는데 이때 방문체크는 하지 않는다.
BFS를 돌리면서 각점의 숫자들을 이어붙여서 새로운 숫자를 만들고 7자리가 됐을 때 저장한다.
이때 같은 숫자는 체크하면 안되므로 set을 이용하여 중복제거를 했고 마지막에 set의 길이를 출력한다.
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,-1,1]
tc = int(input())
def solv(t):
global board, answer_set
board = [list(input().strip().split()) for _ in range(4)]
answer_set = set()
for sx in range(4):
for sy in range(4):
bfs(sx,sy)
print('#%d %d'%(t,len(answer_set)))
def bfs(sx,sy):
global answer_set
q = deque([(sx,sy,board[sx][sy])])
while q:
x,y,now = q.pop()
if len(now) == 7:
answer_set.add(now)
continue
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if point_validator(nx,ny):
q.appendleft((nx,ny,now+board[nx][ny]))
def point_validator(x,y):
if x < 0 or y < 0 or x >= 4 or y >= 4:
return False
return True
for t in range(1,tc+1):
solv(t)
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 3752 가능한 시험 점수 파이썬 (0) | 2021.08.11 |
---|---|
[SWEA] 1226 [S/W 문제해결 기본] 7일차 - 미로1 파이썬 (0) | 2021.08.11 |
[SWEA] 1249 [S/W 문제해결 응용] 4일차 - 보급로 파이썬 (0) | 2021.08.11 |
[SWEA] 1210 [S/W 문제해결 기본] 2일차 - Ladder1 파이썬 (0) | 2021.08.11 |
[SWEA] 4112 이상한 피라미드 탐험 파이썬 (0) | 2021.08.10 |
Comments