Technology/Problem Solving

[PS]맞왜틀 시리즈4 초기화

문베디드 2022. 5. 21. 18:28

알고리즘 문제를 풀다보면 아무리 코드를 봐도 맞는데 틀린다.

우리는 그럴때 이렇게 말한다.

이번엔 초기화가 문제이다.

당신의 초기화 코드는 매번 실행할때마다 적절하게 초기화를 하고 있는지 확인하자

반복해서 수행되는 함수에서 처음 호출될때만 초기화가 제대로 되고 이후에는 제대로 안되고 있을 가능성이 있다!

예시 케이스만 돌리는 경우에 케이스 수가 적어 문제가 발생 안하기 때문에 놓칠수도 있다. 반복해서 처리하는 함수를 작성했을 경우에 제대로 초기화가 되었는지 확인이 필요하다.

 

내가 이번에 도전한 문제는 숫자야구게임 문제이다. 자세한 설명은 문제 링크에서 찾아보자.

참고한 풀이는 풀이 링크에서 찾아보자.

 

이번 문제를 풀면서 dfs와 메모리풀을 활용해 경우의 수를 만들어주는 부분이 있었는데 처음 테스트 케이스는 문제가 없지만 초기화 없이 계속 진행하면 메모리풀을 재활용하게 되는데 초기화를 안해주니 문제가 생긴다.

1
2
3
4
5
6
7
void init() {
    poolCnt = 0;
    HEAD.next = 0;
    //dfs를 사용하여 숫자 조합을 만들 수 있음
    dfs(0); //0은 첫 자리를 의미
}
 
cs

문제 첫 제출에서 위 코드의 라인#2,3 내용이 없었다. 그런 경우 메모리 접근 오류가 발생한다. 메모리풀 배열이 10000개까지만 잡혀있어서 init 호출마다 poolCnt가 계속 늘어나고 결국 접근오류가 생긴다.

 

전체코드

http://colorscripter.com/s/y0bqwkh

 

공유된 코드 - Color Scripter

저작권자 : nacl1119@gmail.com 삭제 요청 코드 설명 : SWEA 1768 숫자야구게임

colorscripter.com