SW사관학교 정글/정글일지

[WEEK03] 컴퓨팅 사고로의 전환

아크리미츠 2024. 8. 15. 18:07

  정글의 마지막 알고리즘 주간인 3주차가 지나갔다. 걱정한대로 DP는 정말 지옥이었다. 출제자가 만들어 놓은 점화식을 찾는 다는 것은 생각보다 더 어려운 일이었다. 체감상 그리디 골드3 문제보다 DP 실버5 문제가 더 어려운 느낌. 알고리즘 주간을 진행하며 머리가 가장 아픈 주간이었다. 오죽하면 두통약까지 찾아 먹었다. 문제를 푸는 데도 오래걸려서 모든 주간을 합쳐서 문제의 갯수는 가장 적은데도 불구하고 결국 마지막 문제를 해결하지 못한 채 1주가 지나게 됐다.

  알고리즘 주간 통틀어서 시험문제에 대해서도 가장 걱정이 많았다. 아무래도 연습문제도 다 풀지 못했기 때문에 도대체 시험 문제에서는 어떤 문제가 나올까라는 생각을 했다. 시험이 시작됐고 구현 1문제, DP 2문제, 그리디 1문제가 나왔다. 구현 문제와 그리디 문제는 아주 수월하게 해결했다. 누군가 말하길 그리디는 이게 그리디로 풀어야하는 건지 모를 때 어려운 알고리즘이지 그리디로 풀어야하는걸 알게되면 쉽게 풀 수 있는 문제라고 했는데 그게 어떤 느낌인지 딱 와닿았다. 그리고 DP 문제 중에 1개는 문제 양식이 대표적인 문제여서 점화식을 금방 도출해냈고, 쉽게 풀었다. 그러나 마지막 1문제가 난관이었다. 난이도는 그렇게 어렵지 않은 문제였다. (시험이 끝나고 생각하면 정말 기본적인 메모이제이션문제였으니..) 그러나 문제를 풀 당시에는 정말 모르겠어서 결국 50분 정도를 사용했음에도 풀지 못했다. 후에 정답 코드를 보니 완전 탐색으로 푸는 문제였는데 시행 횟수가 너무 많다보니 한 번 계산한 값은 테이블에 기억해 놓고 같은 결과를 호출할 때 기억했던 값을 불러오는 문제였다. 문제를 풀면서 설마 그렇게 단순한 메모이제이션이겠어? 하면서 입력된 숫자간의 관계식을 찾으려고 했었는 데, 그것이 패착이었던 것이다. 알고리즘을 풀면서 설마? 라는 말을 주의 해야겠다.

  이제 교육생들이 고통을 호소한다는 C언어-Pintos 주간의 첫 발을 떼는 4주차가 시작되었다. C언어를 예전에 했어서 쉽게 할 수 있을 것이라고 동기들이 격려해줬다. 그러나 내 자신은 내가 잘 아는 법. 나는 중학생과 대학생 때 C언어로 코드를 짜보긴 했어도 C언어를 할 줄 안다라고 하기엔 너무나 택도 없다고 생각한다. 내가 생각하기에 C언어로 짜는 것과 C언어를 할 줄아는 것은 완전히 다른 것이다. 자동차로 비유하자면 **자동차를 운전할 줄 아는 것과 자동차를 다룰 줄 아는 것**이라고 해야할까? 자동차를 운전해서 목적지에 도달하는 방법은 알지만 자동차가 고장나면 왜 고장났는 지, 엔진이 어떤 방식으로 작동해서 바퀴가 굴러가는 지 등을 모르는 것과 같다. 구조체를 만들어서 구조체를 사용할 줄은 알지만, 구조체가 어떻게 생겼는지를 모른다. C언어로 코드를 짜서 컴파일러를 돌리면 프로그램이 실행되는 것은 알지만 컴파일러가 어떤식으로 작동하는 지는 모른다. 32bit OS에서 왜 RAM이 4gb밖에 인식이 되지 않는지 등등.. 그렇기에 이번에C언어 주간에는 C에 관련된 지식도 같이 배우면서 천천히 씹고 뜯고 맛보고 즐기면서 C를 공부하고싶다.