다 풀었다! ###

며칠이 걸렸는지는 모르겠지만 아무튼 하루에 한개씩 꾸준히 풀다보니 어느새 문제집 하나를 다 풀었다. 지금보니까 총 45문제였나 보다.

image
만세!

문제를 풀면서 느끼건데, 삼성 코테 기출이다 보니까 푸는 사람들이 대부분 코테를 준비하려고 푸는 것 같았다. 나는 사실 가까운 시일 내에 코테를 보거나 할 일은 없을 것 같은데, 코포치거나 할때 구현이 가끔 잘 안풀릴 때가 있어서 연습삼아 풀었다고 할 수 있겠다.

좀 구현실력이 늘었냐 하면 아직은 글쎄올씨다…지만 그래도 나름 재미있었다. 옛날에 아이디어 위주의 문제 풀때는 3시간씩 머리싸매던 것이 예사였는데, 바로바로 손가락이 움직이니까 좀 덜 답답한 것 같기도 하다.

또, C++ 연습하는 데에도 도움이 많이 되었다. 지난학기 OS를 들으면서 C를 사용하는데 좀 미숙했던 경험도 있고, Python을 사용하다보면 TLE받을 상황이 꽤 있어서 장기적으로 C++을 연습하려 했는데, 이번에 어느정도 기초를 다질 수 있었던 것 같다.

문제에 대한 생각

알고리즘만 보았을 때에는 BFS, DFS, 백트래킹, 그리고 가끔 Disjoint Set 정도만이 사용되어서 결국은 구현을 얼마나 빠르고 정확하게 하느냐의 싸움이다. 문제의 80퍼센트는 2차원 배열을 움직이고 돌리고 조작하는 문제였던 것 같다.

한가지 좋았던 점은 테케가 풍부했다는 점이다. 돌이켜보면 예제 다 맞추고 맞왜틀 한 기억이 아마 없었던 것 같다. 테케를 거의 10개씩 주니까 한번에 맞았습니다!!를 받을 수 있어서 기분좋게 문제를 풀 수 있다.ㅎㅎㅎ

기억에 남는 문제들

다시한번 문제 제목을 스윽 읽어보니, 인상깊었던 문제들이 몇 보인다.

사다리 조작(링크)

  • 음… 이건 좀 사이즈 큰 edge case 테케를 따로 처리하도록 했더니 4000ms씩 걸리던게 1/10로 줄어서 기억에 남는다. 비슷한 테케중에 그 if문에 안걸리게 만들 수 있을 것도 같은데, 잘 모르겠다.

큐빙(링크)

  • 이건 뭐 말이 필요한가. 이렇게 순도 100% 노가다 문제는 본적이 없다. 뭔가 아름답게 구현할 수 있는 수학적 구조가 없을까 골똘히 생각하다 결국 그런거 없이 공책에 그리면서 차근차근 풀었다.

나무 재테크(링크)

  • 이건 파이썬으로 풀다가 시간초과를 여러번 받아서 기억에 남는다. 솔직히 좋은 문제는 아니라고 생각한다. 그냥 상수시간 차이 정도 나는 부분을 if문 안에 넣어서 처리하면 시간초과 나던게 통과된다. 고작 두줄 차이인데!

어항 정리(링크)

  • 이건 오늘 풀어서 기억에 남는 것 같기는 하지만, 파이썬으로 너무 깔끔하게 구현되어서 기분이 좋았다.

다음에는…

구현은 이 정도면 실컷 한 것 같아서, 예전처럼 새로운 알고리즘을 배울때의 즐거움이 그리워졌다. 앞으로는 FFT, Graph Cut, Maximum Flow 등 이름만 들어보았던 알고리즘을 새로 배워보는 것을 목표로 하려 한다. 이런 구현 문제들은 나중에 내가 혹시 코테를 쳐야한다면 그때가서 다시 복습하는 걸로…