etc/삼성 알고리즘 과정

[18일차] 디버깅 지옥

uyt8989 2022. 2. 14. 20:33

두번째 프로 문제를 주말 사이에 풀기 시작했다. 원래 시험 시간은 4시간이라 얼마나 걸릴까해서 시간을 재면서 시작했다. 첫번째 시도에서 설계를 어느정도 마치니 거의 한시간이 지나갔다. 그래서 이 정도면 됐다 싶어서 코딩을 시작했는데 코딩 도중에 설계할 때 생각하지 못 했던 예외들이 자꾸 튀어나왔다. 그래서 코드가 덕지덕지돼서 아주 더러워졌다. 그래서 아무리 디버깅을 해도 제대로 돌아가지지 않았다. 심지어 사이트에서 돌려보려고 하니까 메모리 초과... 배열을 너무 크게 잡은게 문제였다...

 

그래서 자료구조를 뒤엎고 아예 백지에서부터 시작했다. 첫번째 설계에서 부족했던 부분을 보충해서 코드를 작성했다. 조금 더 깔끔해지기는 했지만 여전히 예외가 있었다. 그래도 꾸역꾸역 문제를 찾아내서 마지막엔 25개 중에 3개만 실패하는데까지는 도달했지만 입력 3000개짜리 테스트 케이스를 디버깅하고 있다보니 정신이 나갈 것 같았다. 그래서 그냥 질문글을 올리고 VS를 닫았다. 시간 쟀던건 4시간은 무슨 4일 안에 풀면 다행인 수준이다. 이미 벌써 3일째^^

 

수정) 

글 먼저 올리고 계속 문제를 풀다가 드디어 해결했다. 포인터를 제대로 끊어주지 않아서 생기는 문제였다. 축하합니다 PASS 보자마자 손 아플때까지 박수쳤다.

 

<이번 문제를 풀면서 느낀 점>

1. ★★★★★★ 설계가 진짜 세상에서 제일 중요함 ★★★★★★

대충 이번 문제는 이렇게 풀자의 느낌만 잡기보다는 이렇게하면 어떤 오류가 발생할 수 있을까하고 미리 예외처리까지 생각하는게 도움이 많이 될듯. 이번 문제에서는 어떤 상태에서 다른 상태로 넘어갈 때의 처리가 중요했다. 아무 생각 없이 처리하다보니 문제가 계속 생김

 

2. 내가 직접 자료구조를 만들어서 쓰는게 더 빠르긴 하지만 문제를 푸는게 우선임. 배열같은걸 사용하다보니 인덱스 오류 같은게 자주 발생했음. 벡터가 쓰고 싶다면 우선 벡터를 쓰고 나중에 배열로 바꾸는게 좋을듯.

 

3. VS에 있는 기능 중에 중단점에 조건 거는게 아주 유용했음

 

4. 중간중간 어렵지만 더 좋을 것 같은 방향으로 가는게 맞음. 어차피 더 쉬운 방향으로 갔다가 돌아오게 된다. 이번 문제에서만 한 3번은 이랬던 것 같다.

 

추가 5) 냄새가 구린 부분은 냄새나는 이유가 있다.