etc/삼성 알고리즘 과정 20

삼성전자 DX 부문 동계 대학생 S/W 알고리즘 역량 강화 과정 후기

요새는 매일 새로운 개념을 배우지는 않고 문제 위주여서 매일매일 딱히 정리할 게 없어서 글을 쓰지 않았었다. 그래도 오늘이 과정 마지막 날이라 후기를 남기기로 했다. 과정은 앞으로 역량 테스트 하나만 남았다. 아마 쉽지 않을 것 같지만 도전해봐야지. 처음에는 뭐라도 하려고 무지성으로 신청했다. 아마 서울 42 체크인하려고 동기들이랑 피시방에 모여있었을 때다. 학과 홈페이지에서 이걸 발견하고 서울 42가 될지 안 될지 모르겠어서 신청했다. 군 전역하고 처음 보내는 방학이라서 뭐라도 하면서 보내고 싶었다. 지금까지는 방학에 알바를 하거나 신나게 놀기만 한 상태였다. 앞으로 조금이라도 도움이 될 것 같은 활동이 전무했다. 처음에 사전 문제를 풀 때에는 와 이거 생각보다 벽이 높구나 하며 컴공을 6학기까지 다녔..

[19~21일차] 그래도?

계속 프로 문제를 풀고 있다. 정확하게는 문제를 시원하게 풀지 내지는 못하고 계속 도전하고는 있다. 오늘 푼 문제도 분명히 이 정도면 시간제한 안에 들어오겠다 싶었는데 결국 시간 초과를 해결하지는 못했다. VS로 돌려봤을 때에 테스트 케이스를 모두 맞추기는 하지만 마지막 테스트 케이스가 3초 안에 해결되지 않는다. 어차피 1.5초 안에 25개를 다 마치지 못하면 실패니까 거의 의미 없긴 하다. 그래도 오늘은 24/25까지 오는데 큰 어려움이 없었다. 설계를 평소보다 조금 더 꼼꼼히 했더니 확실히 구현하는 것 자체는 크게 어렵지 않았다. 처음에 문제를 봤을 때에는 도저히 답도 안 나왔는데, 갑자기 아이디어가 생각나더니 설계도 금방할 수 있었다. 설계하는 도중에 뭔가 아다리가 딱딱 맞아가길래 조금 설레었다...

[18일차] 디버깅 지옥

두번째 프로 문제를 주말 사이에 풀기 시작했다. 원래 시험 시간은 4시간이라 얼마나 걸릴까해서 시간을 재면서 시작했다. 첫번째 시도에서 설계를 어느정도 마치니 거의 한시간이 지나갔다. 그래서 이 정도면 됐다 싶어서 코딩을 시작했는데 코딩 도중에 설계할 때 생각하지 못 했던 예외들이 자꾸 튀어나왔다. 그래서 코드가 덕지덕지돼서 아주 더러워졌다. 그래서 아무리 디버깅을 해도 제대로 돌아가지지 않았다. 심지어 사이트에서 돌려보려고 하니까 메모리 초과... 배열을 너무 크게 잡은게 문제였다... 그래서 자료구조를 뒤엎고 아예 백지에서부터 시작했다. 첫번째 설계에서 부족했던 부분을 보충해서 코드를 작성했다. 조금 더 깔끔해지기는 했지만 여전히 예외가 있었다. 그래도 꾸역꾸역 문제를 찾아내서 마지막엔 25개 중에 ..

[17일차] B형 시작

오늘부터 B형 문제를 풀기 시작했다. 사실 원래 어제부터 풀었어야 했는데 어제 풀던 문제는 도대체 놓치고 있는 게 어떤 포인트인지 못 알아내서 결국 해결하지 못하고 그냥 넘어왔다. B형 문제의 첫인상은 생각보다 할만해 보이는데? 였지만 B형 문제는 B형 문제였다. 구현이 진짜 너무 힘들었다. 설계에 시간을 많이 투자하라는 말이 진짜 빈 말이 아니었다. 대충 이 정도면 됐겠지 싶어 바로 코딩에 들어갔다. 설계가 부실한 상태로 코딩을 하다 보면 중간중간에 디테일을 즉흥적으로 구현하게 되고 그 중구난방 한 디테일들이 모여서 큰 문제를 만들어낸다. 디테일하게 설계할수록 구현이 쉽고 디버깅할 것도 많이 없다. 내가 이 문제를 어떻게 풀지 딱 정해놓는 게 필요할 것 같다. 이랬다 저랬다 하면 나만 더 피곤 해질 뿐..

[16일차] 미궁에 빠짐

오늘부터는 역량테스트 B형 공부를 시작하게 됐다. 하루에 한문제씩 올라오게 되는데 아직 기초 문제도 다 못 풀어서 오늘 올라온 문제는 시작도 못했다. 어제부터 한 문제를 계속 붙잡고 있는데 도저히 해결이 되지 않는다. 일단 예시 입력까지는 다 맞았는데 제출하면 어림도 없다. 원래는 매일 백준 문제를 1개씩은 풀면서 따라왔었는데 도저히 불가능할 것 같다. B형 시험은 제한시간이 4시간이다. 그런데 4시간 안에 풀면 B형을 붙을 수 있는 수준이라 한참 부족한 나는 4시간보다 더 오래 걸릴 것 같다. 하루에 최소 4시간씩은 한문제만 붙들고 있을텐데 연구실 인턴하면서 1일 1백준까지 하기엔 시간이 너무 부족하다. 가끔 시간 여유가 생기면 간간히 풀어야겠다. 그런데 지금 풀고 있는 문제는 왜 풀리지 않을까...?

[15일차]

이제 연습 파트는 거의 다 끝났고 내일부터는 실전 문제를 풀게 된다. 최종 목표는 삼성 역량 테스트 B형을 취득하는 건데 아마 그건 쉽지 않을 것 같다. 특강이 끝나기 전에 테스트를 보게 되는데 거의 손도 못 대고 나올 것 같다... 뭐 되는 데까지는 해봐야지. 그리고 오늘 문제를 풀면서 Trie라는 자료구조를 새로 알게됐다. 문제에 Trie를 적용해서 풀어야 하는데 나는 전혀 모르는 자료구조라서 일단 자료구조 공부부터 했다. 곧 문제도 풀어봐야지.

[14일차] Hash (2)

오늘은 딱히 새로운 내용을 배우진 않았고, 대신 꽤나 큰 문제를 하나 풀었다. 이 문제도 주어진 명세에 맞게 API를 구현하는 문제였다. 데이터베이스를 관리하기 위해 삽입, 삭제, 수정, 검색 기능을 구현해야 했다. 이전까지 이런 유형의 문제는 대부분의 함수는 쉽고 한두 개의 함수들만 빡 어려웠었는데, 아직 내가 해쉬에 익숙하지 않아서인지 이번 문제는 전체적으로 난도가 있었던 것 같다. 해쉬를 잘 관리하는 게 생각보다 쉽지 않았다. 막연하게 당연하지라고 생각했던 사실들을 이 문제를 풀면서 몸소 느꼈다. 1. 두 문자열의 해쉬 값이 같다고 해서 둘이 같은 문자열임을 보장할 수는 없다. => 그렇다고 충돌이 일어날 때마다 두 문자열을 검사하면 시간 복잡도가 폭발적으로 증가할 수 도 있다. 그래서 대충 맞다고..

[13일차] Hash (1)

오늘은 드디어 해쉬에 대한 내용을 배웠다. 사실 이전까지의 내용들은 학부 수업을 들으면서 조금씩이라도 공부한 내용이었다면, 해쉬는 거의 배운 적이 없다. 배우더라도 이런게 있다 식으로만 지나갔던 것 같다. 실제로 해쉬가 여기저기에 많이 쓰이는 것으로 알고 있어서 꽤 궁금했었다. 하지만 더 찾아보지는 않았었다. 딱 이 정도로만 해쉬를 알고 있었는데 오늘 특강에서 배운 내용들은 좀 신기했다. 그리고 몇 문제를 풀었는데, 아무리 해도 시간 초과가 해결되지 않았다. 알고보니 그 문제는 KMP 혹은 라빈 카프 알고리즘을 적용해서 푸는 문제였다. KMP 알고리즘을 배우기는 했지만 배운지가 너무 오래돼서 기억이 가물가물하고 배울 당시에 되게 어려웠던 기억이 있어서 선뜻 KMP로 풀고 싶지 않았다. 그래서 라빈 카프 ..

[12일차] Heap (2)

오늘은 heap 파트의 마지막 문제를 풀었다. 이번 문제는 어려운 알고리즘을 적용해야 하는 문제는 아니었다. 주어진 API를 기능에 맞게 구현하는 문제였다. API가 4~5개 정도 있었는데 하나를 빼고는 모두 어떤 상황을 만들기 위한 입력을 받는 부분이라 쉽게 구현할 수 있었다. 마지막 API는 내용이 어렵지는 않았지만 정확히 작동하도록 구현하는게 쉽지 않았다. 일단 입력이 상당히 난해해서 디버깅하는데 애를 좀 먹었다. main 부분 코드가 주어지기 때문에 알아서 API를 호출해준다. 그래서 아직도 입력 텍스트만 보고는 이게 뭘하고 싶은건지 모른다. 시간이랑 공간 제약은 상당히 넉넉해서 문제를 풀 때 거의 구애받지 않았다. 중간에 깨달았는데 나는 문제를 너무 어렵게 풀고 있었다. 크기가 고정된 배열인 경..

[11일차] Heap (1)

설 연휴가 끝나고 오랜만에 평일이 됐다. 연휴 동안에 SWEA에 들어가 보니 heap 자료가 이미 올라와있길래 두 문제 미리 풀었다. 그리고 오늘은 세 문제 풀어놨다. 5년 전 자료구조 수업에서 heap을 배우고 이게 뭐야 했던 기억이 있는데 이제는 heap이 뭔지 알고 있다. 오늘 SWEA에서 문제를 풀면서 분명 heap 시간인데 문제가 너무 DP스러워서 일단 DP로 시작했다. 그런데 문제를 풀다보니 DP로는 해결되지 않을 것 같았다. DFS나 BFS 둘 중 하나를 사용해야 할 것 같길래 일단 무지성 DFS를 했다. SWEA는 스택 메모리가 야박하다는걸 segmentation fault를 보고 깨달았다. 그래서 BFS로 문제를 해결하고 있는데 아무리해도 답이 안 나왔다. 알고보니 DFS할 때 썼던 bo..