유기농 배추 문제는 주어진 2차원 배열에서 적절한 카운트를 하는 문제인데, 기본적으로 해결책을 안다면 아주 쉽게, 잘 모른다고 해도 어 뭔가뭔가 이런게 필요한가? 싶은 유도를 생각 해 낼 수 있는 문제이다. 아이디어가 생각난다면 지금 당장 시도해보면 좋다.
https://www.acmicpc.net/problem/1012
다 괜찮았는데 한 가지가 걸림
for i in range(testCase):
fieldX, fieldY, cabCount = list(map(int, input().split()))
isVisited = [[False for _ in range(fieldY)] for _ in range(fieldX)]
field = [[0 for _ in range(fieldY)] for _ in range(fieldX)]
reqCount = 0
for j in range(cabCount):
cabX, cabY = list(map(int, input().split()))
field[cabX][cabY] = 1
왜 2차원 배열에 선언 하는데 Y와 X가 뒤 바뀌어야 잘 작동되는지 의아했다.
파이썬 언어 특성, row로 저장되는 점 때문에 그런가보다 하기로 했다.
브프스 느므즈으 우끼끼
import sys
from collections import deque
input = sys.stdin.readline
q = deque()
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
testCase = int(input())
for i in range(testCase):
fieldX, fieldY, cabCount = list(map(int, input().split()))
isVisited = [[False for _ in range(fieldY)] for _ in range(fieldX)]
field = [[0 for _ in range(fieldY)] for _ in range(fieldX)]
reqCount = 0
for j in range(cabCount):
cabX, cabY = list(map(int, input().split()))
field[cabX][cabY] = 1
for j in range(fieldX):
for k in range(fieldY):
if(isVisited[j][k] == False and field[j][k] == 1):
q.append([j, k])
reqCount += 1
while(q):
x, y = q.popleft()
for l in range(4):
nx = x + dx[l]
ny = y + dy[l]
if(nx < 0 or nx >= fieldX or ny < 0 or ny >= fieldY):
continue
if(field[nx][ny] == 0):
continue
if(isVisited[nx][ny] == True):
continue
isVisited[nx][ny] = True
q.append([nx, ny])
print(reqCount)
'문제풀이' 카테고리의 다른 글
BOJ 1475 : 방 번호 (0) | 2025.05.15 |
---|---|
BOJ 10026 : 적록색약 (0) | 2025.05.14 |
BOJ 14891 : 톱니바퀴 (0) | 2025.05.12 |
malloc LAB #3 : Explicit Free List (0) | 2025.04.28 |
malloc LAB #2 : Implicit Free List (1) | 2025.04.28 |