딱 하나만 풀고 알바 가야겠다 하고 있던 와중 내가 실패한 문제가 눈에 들어왔고 그게 바로 유기농 배추!!
정현이 형한테 dfs 하나는 진짜 기가 막히게 배운거 같다. 재귀함수가 이제 머리속으로 막 그려지고 그런다...어쩜 좋니ㅎㅎㅎ
(그냥 내가 잘하는 걸수도 ㅋ)
장난이고 ㅎㅎ 한번 풀어봤던 유형의 문제는 그 풀이 방식을 기억하고 있는 것 같다. 처음 dfs를 풀 때 몇 시간씩 머리 박으면서 몸소 느꼈던 안보이는 에러들.. 예외 처리.. 그 세세한 것들 전부 기억하고 있어서 비슷한 문제들은 쉽게 풀리는 게 아닐까 싶다!!! (정현씨.. 말은 안해도 진짜 고맙다고.. 나 절대 버리면 안돼ㅠ 못해도 뭐라하고 나사빠지면 계속 채찍질 해주고.. 그러다가도 당근도 한번씩 주고.. 코테 통과할 실력이 되는 그 날까지 ㅎ 빚은 한번에 갚을께 ♥️)
문제를 보자마자 어떻게 풀어야 할 지 머리속으로 주르르르륵 그려졌고 코드로 옮기는데는 5분..? 도 안걸린거 같다.
당연히 테스트 케이스 전부 한번에 pass !!!!
제출 결과는..? 런타임 에러..?
모두가 예상했듯 재귀 깊이 제한을 안풀어줘서 그랬다. 조금이라도 재귀가 깊이? 들어갈 거 같으면 항상 추가해주고 시작해야겠다.
import sys
limit_number = 15000
sys.setrecursionlimit(limit_number)
inputMap = []
visitMap = []
answerList = []
def dfs(row, col):
global M, N
if row < 0 or row == N or col < 0 or col == M:
return
if visitMap[row][col] == 1:
return
visitMap[row][col] = 1
if inputMap[row][col] == 0:
return
dfs(row, col + 1) # 오른쪽
dfs(row + 1, col) # 아래쪽
dfs(row, col - 1) # 왼쪽
dfs(row - 1, col) # 위쪽
for _ in range(int(input())):
M, N, K = map(int, input().split())
answer = 0
inputMap = [[ 0 for j in range(M) ] for k in range(N) ]
visitMap = [[ 0 for j in range(M) ] for k in range(N) ]
for i in range(K):
X, Y = map(int, input().split())
inputMap[Y][X] = 1
for i in range(N):
for j in range(M):
if visitMap[i][j] == 0 and inputMap[i][j] == 1:
answer += 1
dfs(i, j)
answerList.append(answer)
for a in answerList:
print(a)
문제를 많이 풀수록 주석(comment)가 없어지고 코드가 좀 예뻐지는?거 같다. 기분 탓인가
오늘은 스터디도 했고 알바도 했고 알고리즘도 했고 리액트도 했고 캔맥 딱 하나만 마시고 드라마 1화만 딱 보고 일찍 자자
낼도 화이팅 😎