BOJ 22352번: 항체 인식

2021. 8. 16. 01:54· 알고리즘💻/그래프(DFS&BFS)

https://www.acmicpc.net/problem/22352

 

22352번: 항체 인식

첫 번째 줄에는 SP 촬영 결과의 크기를 의미하는 두 정수 $N$과 $M$이 주어진다. ($1 \le N, M \le 30$) 이는 촬영 결과가 세로로 $N$칸, 가로로 $M$칸 크기의 격자라는 것을 의미한다. 다음 $N$개의 줄에는

www.acmicpc.net

백신을 맞기 전(before)과 맞은 후(after)의 배열의 원소를 비교하다가 다른 원소가 나오는 경우에 해당 원소에 백신을 맞은 것으로 가정하고 백신을 맞아서 변화된 데이터는 after의 원소값이라 생각하고 dfs를 통해 해당 원소부터 상하좌우로 갈 수 있는 모든 before의 원소의 값을 바꾼다.

dfs를 실행한 후 다시 before와 after의 원소를 비교하고 만약 다른 값이 있다면 NO를 출력하고, 모두 같다면 YES를 출력한다.

애초에 before와 after의 값이 완전히 같은 경우도 YES를 출력하도록 처리해야 한다.

import sys
input = sys.stdin.readline
N, M = map(int, input().split())
before = []
after = []
for _ in range(N):
    before.append(list(map(int, input().split())))
for _ in range(N):
    after.append(list(map(int, input().split())))

dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
visit = [[False]*M for _ in range(N)]
q = []

def dfs(a, b, old, new):
    q.append([a,b])
    before[a][b] = new
    visit[a][b] = True
    
    while(q):
        v = q.pop()
        for i in range(4):
            x = v[0]+dx[i]
            y = v[1]+dy[i]
            if (x>=0 and x<N and y>=0 and y<M and visit[x][y]==False and before[x][y]==old):
                visit[x][y] = True
                before[x][y] = new
                q.append([x,y])

    for i in range(N):
        for j in range(M):
            if (before[i][j]!=after[i][j]):
                print("NO")
                return
    print("YES")
    return

for i in range(N):
    for j in range(M):
        if (before[i][j]!=after[i][j]):
            dfs(i,j, before[i][j], after[i][j])
            sys.exit(0)
print("YES")

dfs를 실행할 위치를 고른 후 dfs를 실행하고, 다시 before와 after의 원소값이 같은 지 체크할 때 그 전에 탐색한 위치에서 이어서 탐색하면 된다고 생각하고 for i in range(이전위치, N): for j in range(이전위치, M) 으로 해놓는 멍청한 짓을.. 어차피 N,M<=30이므로 그냥 다시 처음부터 탐색하도록 했다..^^

저작자표시 (새창열림)

'알고리즘💻 > 그래프(DFS&BFS)' 카테고리의 다른 글

BOJ 5014: 스타트 링크  (1) 2023.09.15
BOJ 1922번: 네트워크 연결  (0) 2021.08.16
BOJ 20924번: 트리의 기둥과 가지  (0) 2021.08.16
BOJ 14940번: 쉬운 최단거리  (0) 2021.08.14
BOJ 2210번: 숫자판 점프  (0) 2021.08.12
'알고리즘💻/그래프(DFS&BFS)' 카테고리의 다른 글
  • BOJ 5014: 스타트 링크
  • BOJ 1922번: 네트워크 연결
  • BOJ 20924번: 트리의 기둥과 가지
  • BOJ 14940번: 쉬운 최단거리
호프
호프
호프
Untitled
호프
전체
오늘
어제
  • 분류 전체보기 (341)
    • 오류😬 (4)
    • 스터디📖 (96)
      • 웹 개발 기초 (8)
      • Spring (20)
      • ML, DL (30)
      • Node.js (22)
      • React (0)
      • 블록체인 (12)
      • Go (3)
      • Javascript (1)
    • 알고리즘💻 (153)
      • 그리디 (23)
      • Bruteforce&Backtracking (16)
      • DP (17)
      • 이분탐색&정렬&분할정복 (17)
      • 누적합&투포인터 (6)
      • 스택&큐&덱 (19)
      • 그래프(DFS&BFS) (19)
      • 트리 (7)
      • 우선순위큐&다익스트라 (11)
      • 벨만포드&플로이드와샬 (8)
      • map&set&number theory (5)
      • 기타 (5)
    • 프로젝트 (3)
      • 캡스톤 디자인 프로젝트 (3)
    • 블록체인🔗 (3)
      • Solana (2)
      • 개발 (0)
      • Harmony (1)
    • ASC (6)
    • CS (73)
      • 데이터베이스 (12)
      • 클라우드컴퓨팅 (21)
      • 운영체제 (11)
      • 컴퓨터네트워크 (14)
      • 블록체인응용 (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 복습

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
호프
BOJ 22352번: 항체 인식
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.