1. 겪었던 문제
LeetCode 문제를 풀며, 로직이 맞는 것 같은데도, 제출 시 계속 답이 틀리게 나와서, Debuging을 해보았습니다.
제가 풀었던 문제는 이것입니다.
문제를 안 푸셔도 알 수 있게 간단히 말씀드리면,
target에 있는 값을 key = target[i], value = i 로 해서 map에 집어넣으려고 했습니다. target의 값은 다음과 같았습니다.
target = [5,10,8,11,3,15,9,20,18,13]
근데 System.out.println()
으로 찍어보니 다음과 같이 나왔습니다!
{1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 9=6, 10=1, 11=3, 13=9, 15=5, 18=8, 20=7}
target에 없는 1이나 2 같은 값이 들어있던 것입니다. map에 값을 집어넣는 로직은 맨 처음 한 번 뿐이라 너무 당황했습니다.
그래서 값을 넣을때마다 출력을 다시 해보니
After inserting 5: {1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2}
After inserting 10: {1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 10=1}
After inserting 8: {1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 10=1}
After inserting 11: {1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 10=1, 11=3}
After inserting 3: {1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 10=1, 11=3}
After inserting 15: {1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 10=1, 11=3, 15=5}
After inserting 9: {1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 9=6, 10=1, 11=3, 15=5}
After inserting 20: {1=3, 2=5, 3=4, 4=1, 20=7, 5=0, 6=0, 8=2, 9=6, 10=1, 11=3, 15=5}
After inserting 18: {1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 9=6, 10=1, 11=3, 15=5, 18=8, 20=7}
After inserting 13: {1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 9=6, 10=1, 11=3, 13=9, 15=5, 18=8, 20=7}
{1=3, 2=5, 3=4, 4=1, 5=0, 6=0, 8=2, 9=6, 10=1, 11=3, 13=9, 15=5, 18=8, 20=7}
이미 최초의 5를 넣을 때부터, 다른 값들이 들어가 있었습니다.
2. 문제 해결
문제의 원인은 LeetCode에서 전역(static) 변수를 쓰면, 하나의 TC가 끝났을 때, 전역 변수가 초기화 되지 않는다.
는 점 이었습니다. 그래서 이전 TC의 값들이 그대로 남아있었던 것입니다!
따라서 LeetCode로 문제를 풀 때는 전역 변수 사용을 지양
하거나, 꼭 값 반환 전에 모든 static 변수를 초기화
하는 과정이 필요할 것 같습니다.
'겪은 오류와 해결책' 카테고리의 다른 글
(JWT binding 오류) NoClassDefFoundError: javax/xml/bind/DatatypeConverter (0) | 2024.01.22 |
---|---|
SpringBoot3 Embedded Redis 설정 오류 (0) | 2024.01.20 |