#1012

zzwwoonn·2022년 5월 12일
0

Algorithm

목록 보기
21/71

딱 하나만 풀고 알바 가야겠다 하고 있던 와중 내가 실패한 문제가 눈에 들어왔고 그게 바로 유기농 배추!!

정현이 형한테 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화만 딱 보고 일찍 자자

낼도 화이팅 😎

0개의 댓글