해결된 질문
작성
·
168
·
수정됨
1
강사님이 작성해주신 코드로 실행을 해봤을때 런타임 에러가 발생합니다. 제가 코드를 잘못 작성한 걸까요?
import sys
sys.setrecursionlimit(10**6)
inpurt = sys.stdin.readline
def dfs(y, x):
global map_
cur = map_[y][x]
map_[y][x] = ""
if cur == "-" and map_[y][x + 1] == "-":
dfs(y, x + 1)
elif cur == "|" and map_[y + 1][x] == "|":
dfs(y + 1, x)
# 1. initialize
N, M = map(int, input().split())
MAX = 50 + 10
# N * M
map_ = [["" * MAX] for _ in range(MAX)]
# 2. connection info
for i in range(1, N + 1):
row = input()
for j in range(1, M + 1):
map_[i][j] = row[j - 1]
# 3. dfs
answer = 0
for i in range(1, N + 1):
for j in range(1, M + 1):
if map_[i][j] != "":
dfs(i, j)
answer += 1
# 4. print
print(answer)
코드에 오타가 있는 것 같습니다 map -> map_
답변 3
1
0
0
안녕하세요, 인프런 AI 인턴입니다.
강한 타조님의 문제에 대해, 제공된 정보를 기반으로 유사한 질문과 그에 대한 답변을 찾았습니다. 런타임 에러는 다양한 원인으로 발생할 수 있지만, 주로 코드 내에서 예외 처리가 되지 않은 케이스에 발생하는 경우가 많습니다. 여기에는 배열의 인덱스 범위 초과, 무한 재귀 호출, 초기화 되지 않은 변수 사용 등 여러 원인이 있을 수 있습니다.
질문자님의 코드를 보았을 때, 런타임 에러의 몇 가지 가능성을 추론해볼 수 있습니다:
1. sys.stdin.readline
을 사용하고자 하셨으나 오타로 inpurt
라고 작성된 부분이 있습니다. 올바른 함수 이름은 input = sys.stdin.readline
입니다.
2. 맵을 초기화하는 부분에서 map_ = [["" * MAX] for _ in range(MAX)]
로 작성하셨는데, 이는 MAX
크기의 문자열을 만들고 이를 한 요소로 가지는 리스트를 MAX
번 반복하여 2차원 배열을 만들려는 의도로 보입니다. 하지만 올바르게 맵을 초기화하는 방법은 map_ = [["" for _ in range(MAX)] for _ in range(MAX)]
가 될 것입니다.
3. 인덱스 범위를 확인하기 위한 예외 처리가 코드에 포함되어 있지 않습니다. 예를 들어, dfs
함수 내에서 map_[y][x + 1]
또는 map_[y + 1][x]
를 호출할 때, x + 1
또는 y + 1
이 맵의 크기를 초과하지 않도록 검사하는 로직이 필요합니다.
바로 관련된 질문&답변은 찾기 어렵지만, 비슷한 문제에 대하여 다뤄진 질문 “바닥 장식 (백준 1388) 문제 질문입니당”에서도 유사한 문제 해결 과정을 볼 수 있습니다. 이 경우는 맵 데이터를 어떻게 처리하고 DFS를 적용하는지에 초점을 맞췄습니다.
질문하신 문제에 대한 해결책:
- 입력 함수명 오타 수정(inpurt
-> input
)
- 리스트 초기화 방법 수정
- dfs
함수 호출 전 x + 1
, y + 1
의 범위 검사 추가
현재 베타 기능으로 질문자님의 문제 해결에 완벽히 맞는 답변을 찾기는 어렵지만, 가이드라인을 드렸으니 수정해 보시기 바랍니다. 코드 수정 후에도 문제가 지속된다면, 구체적인 런타임 에러 메시지와 함께 추가 질문을 해주시면 강의 담당 선생님 또는 다른 학습자분들이 더 구체적으로 도움을 드릴 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.