[백준][파이썬] 2210번 - 숫자판 점프
문제 번호 : 2210
문제 출처 : https://www.acmicpc.net/problem/2210
Code
import sys
def recursive(x, y, count):
if count == 5:
number.append(numbers[x][y])
answer_set.add(tuple(number))
else:
number.append(numbers[x][y])
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if -1 < nx < 5 and -1 < ny < 5:
recursive(nx, ny, count + 1)
number.pop()
numbers = [sys.stdin.readline().split() for _ in range(5)]
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
answer_set = set()
number = []
for r in range(5):
for c in range(5):
recursive(r, c, 0)
print(len(answer_set))
Idea
- 각각의 시작점에서 가능한 방향으로 모두 방문하며 list에 숫자를 추가
- 숫자 리스트를 집합 자료형에 입력함으로써 중복을 제거
- 재귀함수가 호출 되고나서 입력받은 리스트와 같은 새로운 리스트를 만들지 않고 기존의 리스트를 append와 pop을 사용해서 스택으로 사용
집합의 요소로는 리스트가 들어갈 수 없다. 그래서 집합에 add
를 할 때 리스트를 tuple
이나 str
로 변환하여 입력해주어야 했다. 집합은 직접 수정이 불가능한 자료형인데 리스트는 주소에 의한 수정이 가능해져서가 아닐까 추측해본다.
'프로그래밍 > BAEKJOON' 카테고리의 다른 글
[백준][파이썬] 17089번 - 세 친구 (0) | 2021.09.17 |
---|---|
[백준][파이썬] 2422번 - 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2021.09.16 |
[백준][파이썬] 15686번 - 치킨 배달 (0) | 2021.08.21 |
[백준][파이썬] 17088번 등차수열 변환 (0) | 2021.08.05 |
[백준][파이썬] 15683번 감시 (0) | 2021.07.24 |