본문 바로가기
알고리즘

[BAEKJOON] 16433 주디와 당근농장

by mAlfred 2025. 10. 2.
반응형

문제

주디는 오랜만에 부모님이 살고 계시는 농장을 방문하여 일손을 돕기로 하였습니다.

주디가 할 일은 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