반응형
문제
주디는 오랜만에 부모님이 살고 계시는 농장을 방문하여 일손을 돕기로 하였습니다.
주디가 할 일은 N × N 격자 모양의 밭에 당근을 심는 일입니다. 각 칸에는 최대 하나의 당근을 심을 수 있는데 어떤 칸에 당근이 심겨 있으면 그 칸의 변을 공유하는 칸들에는 당근을 심을 수 없습니다.
주디는 이미 위치가 (R, C) 인 칸에 당근을 하나 심었고 나머지 칸에도 당근을 심으려고 합니다. 주디가 최대한 많은 당근을 심었을 때 밭이 어떤 모양일지 알려주세요. 주디는 심을 당근을 무한히 가지고 있다고 가정합니다.
입력
첫 번째 줄에 N, R, C (2 ≤ N ≤ 99, 1 ≤ R, C ≤ N) 가 주어집니다.
출력
첫 번째 줄부터 N번째 줄까지 각 줄에 길이가 N인 문자열을 출력합니다.
i행 j열에 당근이 심어졌다면 i번째 줄 j번째 문자를 'v' 로 표시하며 심어지지 않았다면 '.' 로 표시합니다.
예제 입력 1
4 2 3
예제 출력 1
.v.v
v.v.
.v.v
v.v.
dfs 로 문제를 풀어버림
왼쪽 오른쪽 위 아래는 2칸씩 이동하면 되고
대각선 이동도 추가를 해주면 됨
from collections import deque
n,r,c = map(int, input().split())
mp = [[False] * (n+1) for _ in range(n+1)]
visited = [[False] * (n+1) for _ in range(n+1)]
dx = [0, 0, -2, 2, -1, -1, 1, 1] # 위2, 아래2, 왼2, 오2, 왼위, 왼아래, 오위, 오아래
dy = [-2, 2, 0, 0, -1, 1, -1, 1]
mp[r][c] = True
visited[r][c] = True
dq = deque([(r,c)])
while dq:
x,y = dq.popleft()
for i in range(len(dx)):
nx = x + dx[i]
ny = y + dy[i]
if n >= nx > 0 and n >= ny > 0:
if not visited[nx][ny]:
mp[nx][ny] = True
visited[nx][ny] = True
dq.append((nx,ny))
for v in mp[1:]:
for i in v[1:]:
if i:
print('v', end='')
else:
print('.', end='')
print()
반응형
'알고리즘' 카테고리의 다른 글
[BAEKJOON] 32154 SUAPC 2024 Winter (0) | 2025.10.10 |
---|---|
[BAEKJOON] 27434 팩토리얼 3 (0) | 2025.10.10 |
[BAEKJOON] 4084 Viva la Diferencia (0) | 2025.10.02 |
[BAEKJOON] 9325 얼마? (0) | 2025.10.02 |
[BAEKJOON] 31775 글로벌 포닉스 (0) | 2025.10.01 |