

😈 1차로 부딪힌 문제, 런타임 에러(RecursionError)
나는 뭐 재귀함수 탈출 조건이 꼬인 줄 알았다.
😇 시도 / 해결
일단 해당 키워드로 검색을 했다. 아래 블로그에서 해답을 얻을 수 있었다.
https://fuzzysound.github.io/sys-setrecursionlimit
[파이썬 코딩테스트 팁] sys.setrecursionlimit
import sys sys.setrecursionlimit(10 ** 6) 만약 재귀를 사용해서 풀어야 하는 문제라면, 위 코드를 상단에 쓰는 것은 선택이 아닌 필수이다. 파이썬의 기본 재귀 깊이 제한은 1000으로 매우 얕은 편이다. 따
fuzzysound.github.io
파이썬 기본 재귀 깊이 제한이 있어서 테스트 케이스에서 해당 깊이에 걸린 것이다.
import sys
sys.setrecursionlimit(10 ** 6)
setrecursionlimit이라는 직관적인 키워드, 기억하자.
😈 2차로 부딪힌 문제, 초반부터 틀려버리는 경우
저번처럼 print 안지운거 확인하고, 예제 입출력도 확인했는데 초장에 틀려버렸다.
😇 시도 / 해결
그래서 해당 문제 질문 게시판에서 반례를 찾아보았다. 반례나 추가 테스트 케이스를 찾는 것은 이제 습관화해도 될 것 같다.
반례 검색을 하다가 하나 발견했더니, 내가 문제를 잘못 이해하고 있었다는 것을 깨달았다.
첫째 줄부터 N개의 줄에 정수를 한 개씩 출력한다. i번째 줄에는 정점 i의 방문 순서를 출력한다. 시작 정점의 방문 순서는 1이다. 시작 정점에서 방문할 수 없는 경우 0을 출력한다.
1
2
3
4
0
라고 분명히 출력조건을 명시했는데, 해당 순서가 나는 그냥 인접 순서대로 나열된 것을 생각했다. 각 줄은 각 정점을 의미하는 것인데 말이다.
😈 3차로 부딪힌 문제, 재귀함수와 전역변수
위 문제를 해결하기 위해서 카운터 변수가 필요했다. 재귀 함수 안에서 호출될때마다 카운트를 늘려야하는데, 전역변수가 계속 적용이 안되는 문제가 발생했다.
😇 시도 / 해결
로컬과 전역 변수에 대한 지식이 있어서 global이라는 키워드로 검색했다. 초반에는 global키워드가 검색해서 나오길래 대충 전역변수에 global을 붙였는데 에러가 떴다. 이상하다 싶어서 global변수를 설명하는 블로그를 자세히 읽었다.
https://ardentdays.tistory.com/50
Python 재귀에서의 global 활용
Python 재귀에서의 global 활용 재귀에서 global ( 전역 변수 ) 활용 전에 우선 지역 변수와 전역 변수가 무엇인지 말씀드린 뒤, global 이 무엇인지, 이를 어떻게 재귀에서 활용할 수 있는지 말씀드리도
ardentdays.tistory.com
global_var = 3
def test( ) :
global local_var
local_var = 5
print('local_var + global_var : ', local_var + global_var)
return local_var + global_var
test()
## out ##
local_var + global_var : 8
print('local_var : ', local_var)
## out ##
local_var : 5
알고보니 global키워드는 함수 내부에서
global local_var 이렇게 선언해놓고 밑에서 따로 값을 할당하는 것이었다.
나는 그냥 할당할 때, global 키워드를 쓰면 되는 줄 알았다.
어쨌든 이렇게 하니까 해당문제는 통과됐다.
🌟 회고
출력조건을 경시해서 대충 읽었는데, 자세히 읽어봐야 겠다. 그리고 검색한 내용도 대충 읽지 말고 자세히 공부하자. 💫
'Today I Errored 🔥 (문제해결력)' 카테고리의 다른 글
| [플러터] No Firebase App '[DEFAULT]' 에러 (0) | 2023.04.11 |
|---|---|
| 파이어베이스 애널리틱스 api를 붙이는 과정에서 생기는 버전 에러 (0) | 2023.04.10 |
| 문제에 접근하는 방법 정리⚔️ (0) | 2023.03.07 |
| [백준] '틀렸습니다'를 마주했을 때의 태도 (0) | 2023.03.06 |
| 입력받기 (2) | 2023.03.06 |