checklist_debug

  • 일단 -fsanitize=address옵션 추가하고 빌드&실행해서 메모리 오류부터 잡는다.(제일중요)

  • (WA,RTE)그리디에서 tie인 경우, 정말 순서를 무시해도 되는가? https://atcoder.jp/contests/abc304/tasks/abc304_h

  • (WA)의심스러운 가정 재검토, 이후 당연하다고 믿었던것게 잘못된가정인지 재검토, 문제오독인가? 핵심조건을 놓쳤나?

  • (TLE, dp) 초기값(sentinel value)이 계산에 등장하지 않는가? 등장한다면 다른값이나 optional을 사용하라.

  • (TLE, tree) star/bamboo/포화이진트리 에서 복잡도 보장이 되는가?

  • (TLE, dijk) minPQ가 아니라 혹시 maxPQ를 사용중인가?

  • (MLE, bfs) 방문체크했는지?

  • (MLE, deque) deque기본크기가 80인걸 생각해서 메모리제한 계산해보기. 다른 자료구조 사용.

  • (MLE, DataStructure) 좌표압축, 오프라인쿼리

  • 루프내에서 참조하는 값을 변경하고 있는가? 2023현대모비스예선4번 나이브구현

  • vector.push_back()은 반복자무효화 생겨서, 포인터/참조/반복자 전부 쓰레기됨. 이런경우 필요한만큼 reserve해두거나 list쓰자.

  • 오버플로 확인, 로컬에서 -ftrapv옵션 추가해서 테스트

  • 배열크기 여유롭게 잡기, off by one 체크

  • 전역변수(특히 dp,memo배열 등)초기화 누락

  • 음수에 나누기 나머지 연산할 때는 ceil, floor 개념이 뒤바뀐다. (ex: 11661) 왠만하면 cdiv(), fdiv()를 사용하자.

  • set에서 custom comparator쓰기보단 multiset에서 쓰자

  • 볼록인데 unimodal하지 않거나, 거의 볼록인데 볼록은 아닌경우 삼분탐색 탈출조건 (e-s>2)에서 2를 적당히 큰수 K로 바꿔주고 s부터 e까지 for 돌려서 답 구해주면 가끔 뚫림

ETC

https://www.udebug.com/problem-category

GDB cheat sheet

gdb ./bin/a.out

run < input

b : break point

n: step over (next line)

s: step into

fin: step out

c: coninue

p : print evaluated expression

l: show next 10 line

bt: show callstack (backtrace)

q: quit

u/d: call stack up/down

파이썬도 python3 –m pdb나 ipdb 실행하면 gdb와 거의 똑같다.

More Info) https://sourceware.org/gdb/current/onlinedocs/gdb/Sample-Session.html#Sample-Session