몇일 전 오랜 친구들과 휴가와 같은 시간을 보내다, skysign이 알고리즘 스터디를 한다는 것을 알았습니다.  작은 소모임 처럼 운영하고 있기에 저도 같이 참가를 하기로 약속 하였습니다. 벌써 웹사이트도 운영하고 있어서 관심 있는 분은 이쪽으로 ~ https://skysign.github.io/WSTT WSTT가 뭔가 봤더니 웹사이트 제목에 크게 써져 있네요. 기술인 답게 약자를 좋아하는 군요. 궁금하시다면 링크를 클릭~

 

지금은 DP를 공부하고 있다고 해서 기억을 더듬어 보니, 몇해 전 중동 보안 업체 면접 문제중 한 가지가 떠오릅니다. 당시 머리속에 아무 생각도 나지않아 부끄럼 가득한 솔루션을 끄적이고는 돌아서야 했던 아픔이 떠오르네요. 유명한 Palindrome substring 관련된 문제입니다. 그 당시는 입력된 string이 Palindrome인지 확인을 하는 간단한 알고리즘 구현이 면접 문제였습니다.

 

Skysign이 공부하고 있는 topcoder와 여러 싸이트를 보니 왠지 전문적인 분위기라, 조금 접근하기 쉬운 싸이트를 찾아보았습니다. LeetCode ! http://leetcode.com/ 사이트가 간결하고, 알고리즘 문제들에 대한 팁과 솔루션도 함께 쉽게 확인 가능하게 운영되는 싸이트 입니다. 도전해 보고 싶은 알고리즘으로 (예를 들면 Dynamic programming)으로 찾거나 아래와 같이 문제의 이름으로도 쉽게 검색이 가능합니다.

 

 

그동안 코딩을 손놓은지 10년차가 되다 보니, 기본적인 코딩 부분에서 헤매기 시작합니다. 

Visual C++에서 기본 standard string class 추가 조차 구글형의 힘을 빌려 찾아봐야 하는 상황이라니... 지금은 암담하지만 skysign의 노력하는 모습을 보며 저도 마음을 다잡아 봅니다. 한참을 고생하다 LeetCode site에서 바로 코딩하고 컴파일 결과 확인까지 할 수 있다는 것을 알고는 바로 visual c++을 닫!!

 

위처럼 문제에 대한 간단한 설명이 왼편에 나타나고, 오른편은 자신이 선호하는 언어로 곧바로 코딩을 시작할 수 있습니다. (회사에서 모바일로 접속하여도 충분히 코딩 가능한 화면 구성이였습니다. 블루투스 키보드로 직상 상사분들 몰래...)

 

 가능하면 Descrition 하단의 Hint만 보고 해결책을 연습장등에 고민해 보는 것을 추천드립니다. 하지만... 저는 한참을 고민해봐도 텅빈 머리속에 정적만 흐를 뿐이라 부끄럽게도 옆의 Solution 부분을 꼼꼼히 읽어 보았습니다. 일종의 컨닝이죠~

 

꼼꼼히 읽어보고서는 연습장에 solution에서 설명된 규칙을 바탕으로 예제를 손으로 따라가며 그려 보았습니다. 뭔가 열심히 한 것 같지만 그냥 지저분한 낙서 처럼 보이네요. 

이제는 정리해본 알고리즘을 코드로 옮기는 순서입니다. 다른 coding 웹서비스들도 유사하겠지만, Leetcode에서도 곧바로 compile 뿐 아니라 친절하게 error가 난 부분까지 표시를 해주는 기능이 있었습니다. 오랜만에 다시 코딩을 하는 저로서는 각 라인별 debugging (각 변수값을 실시간 표시) 까지 지원해주는 편안함에 세상이 정말 많이 변했음을 타이핑 하며 느끼게 되었습니다. 편함

 

어이없는 코딩 실수들을 부지런히 고치다보니 드디어 [Accepted] 의 순간을 맞이하게 되었습니다. ㅠ.ㅠ 그동안의 게으름 순간 부끄럽게 느껴지는 순간입니다. 매일 조금씩이라도 생활 코딩을 할 수 있는 환경이 있다는 점에 절로 감사가 나옵니다. 늘 그렇듯 습관처럼 코드 리뷰 없이 당당히 [Submit] 버튼을 눌러봅니다. 드디어~~~!!

 

기다렸다는 듯이 Runtime Error가 발생합니다. 제가 로켓사이언스나 생명을 다루는 것과 관련된 IT에 종사하고 있었다면 어찌되었을지 순간 섬뜩해집니다. 열심히 코드를 뒤져서 결국 '예외처리'를 하나도 하지 않았다는 것을 알게 되었습니다.  

 

 

다시한번 마음을 가다듬고 다시한번 [Submit]을 해봅니다. 생각보다 매우 친절하게 성적표가 나왔습니다. Solution을 커닝해서 작성해본 코드였지만 그래도 이 성적표를 보고 있으니 나름 뿌듯해지네요. 그래도 아직 코딩인구이 절반 정도 수준은.. ^^*** 

 

 

실행속도가 전체의 57% 수준이라는 것은 아직도 개선의 여지가 많이 있음을 의미할듯합니다. Dynamic programming 알고리즘을 참조하여 코드를 작성하여 현재 O(n^2)의 성능인데, Leetcode에서는 친절하게 O(n)의 알고리즘도 소개해 주고 있습니다. 이제부터 조금씩 이 알고리즘들을  WSTT https://skysign.github.io/WSTT 스터디그룹과 함께 알아가보도록 해요~

 

반응형

'Prog&Algol' 카테고리의 다른 글

C++ | using namespace  (0) 2022.03.17
2019 Winter Kakao Internship - Hotel room  (0) 2020.04.14
Day-03. DP와 함께 계단 오르기  (0) 2019.12.14
Day-02. 십년 만에 코딩 two sum  (1) 2019.12.09
[C++] Default constructor overriding  (1) 2016.04.29

+ Recent posts