スパルタン365第3週(2)パークナンバー


3週目


白駿2667号団地番号


質問リンク:https://www.acmicpc.net/problem/2667

💡 計画と考え


上下左右の座標を利用する問題です.🤔
:現在を基準に東西南北を探訪して、一人だけの場所を訪問して、道を探します

💡 に答える

# 좌표 문제는 dx, dy 리스트 선언하면 접근이 쉬움
import sys
input = sys.stdin.readline

def dfs(x, y, cnt):
    # 상하좌우 탐방을 위한 리스트 
    dx = [0, 0, -1, 1]
    dy = [1, -1, 0, 0]

    danzi[x][y] = 0
    # 상하좌우 탐방
    for i in range(4):
        # 상화좌우 움직이면서 변하는 현 좌표 
        now_x, now_y = x+dx[i], y+dy[i]
        # 예외 처리
        if now_x<0 or now_y<0 or now_x>=N or now_y>=N or not danzi[now_x][now_y]:
            continue
        cnt = dfs(now_x, now_y, cnt+1)
    return cnt

N = int(input())
danzi = [list(map(int, list(input().strip()))) for _ in range(N)]
cnt = 0
ans = []

for i in range(N):
    for j in range(N):
        if danzi[i][j] == 1:
            ans.append(dfs(i, j, 1))
print(len(ans))
# !정렬을 for문 안에서도 할 수 있구나
for i in sorted(ans):
    print(i)

🧐 渋滞と苦悩


どうやって
  • を上下左右に訪問したのですか?
  • 👏🏻 理解の概念と感じ

  • 上下左右、計4回繰り返し座標変更
  • for i in range(4):
            # 상화좌우 움직이면서 변하는 현 좌표 
            now_x, now_y = x+dx[i], y+dy[i]
  • を入力と直ちにグラフィック
  • が設定.
    danzi = [list(map(int, list(input().strip()))) for _ in range(N)]
  • から文を繰り返して
  • を直接並べ替えます.
    for i in sorted(ans):
        print(i)

    💡 改善方向

  • dfs関数を再帰関数実装でスタックを使用する部分として実装することが望ましい.