etc 55

자질구레한 잡기술

(2022-02-19) 1. Visual Studio: 기본 글꼴보다 Consolas가 훨씬 보기 좋음 (도구 -> 옵션 -> 환경 -> 글꼴 및 색) 에서 설정가능 2. Visual Studio: 선택한 영역 한번에 주석 처리 & 제거 (도구 -> 옵션 -> 환경 -> 키보드) 에서 단축키 설정 바꿀 수 있음 Ctrl키 두번씩 누르기 싫어서 주석은 (Ctrl + B), 제거하는건 (Ctrl + G)로 설정 3. VS code, Visual Studio : Ctrl+K 누르고 Ctrl + F 누르면 자동 줄맞춤

etc/memo 2022.02.19

[19~21일차] 그래도?

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

[18일차] 디버깅 지옥

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

apt vs apt-get

요새 터미널을 진짜 자주 만진다. 그러다보니까 패키지를 설치할 일도 많은데 패키지를 설치하기 위해서 검색을 하다보면 apt를 사용하라는 경우도 있고 apt-get을 사용하라는 경우도 있다. 똑같은 패키지를 apt로도 설치하고 apt-get으로도 설치하길래 도대체 무슨 차이인가 궁금했다. 결론은 둘 다 패키지를 설치하는 명령어임은 똑같다. apt는 apt-get과 apt-cache를 부분적으로 합쳐서 새로 만든 명령어다. apt는 apt-get에 비해 옵션이 조금 부족한 대신 사용자가 보기 편하게 만들었다. apt를 사용하면 진행 상황을 알려주기 위한 표시도 있고 메세지가 조금 더 자세하게 출력된다. 일반 사용자라면 apt를 사용하는게 조금 더 보기 편하지만, 조금 더 디테일한 스크립트 작업이 필요할 때는..

etc/memo 2022.02.13

[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를 호출해준다. 그래서 아직도 입력 텍스트만 보고는 이게 뭘하고 싶은건지 모른다. 시간이랑 공간 제약은 상당히 넉넉해서 문제를 풀 때 거의 구애받지 않았다. 중간에 깨달았는데 나는 문제를 너무 어렵게 풀고 있었다. 크기가 고정된 배열인 경..