- 모범 공부 방법 (싸이클) 제시
- 진짜 못하는 사람에게 주는 조언
-
<쉬어가는 코너> 퀴즈!!


-
재미있어야 계속 풀고, 계속 풀어야 성취감이 쌓인다.
- 즉, 푸는 게 재미있어야 하는데, 너무 힘들거나 스트레스가 받는다면, 재미있을 만한 문제로 돌아가자.
- 쉬운 문제도 괜찮고, 알고리즘 관련해서 썰푸는 영상들도 괜찮다.
- 너무 자신을 밀어붙이다 보면 오히려 독이 된다.
- 다양한 코딩테스트 플랫폼을 이용해보자. 백준 솔직히 재미없다.
-
결국 알아야 풀 수 있는 문제들이 많다. 모르면 당연히 못 푼다.
- 알고리즘과 수학은 많이 비슷한 면이 있다고 생각합니다.
- 실전을 풀기 위해서는 확실한 개념의 이해가 있어야 합니다.
- 그렇다고 해서 개념을 배웠다고 모든 문제를 풀 수 있는가? 절대 그렇지 않습니다.
- 실전을 풀면서 여러 유형을 배우고 습득해야 합니다. 그 과정에서 조금 지엽적인 개념들이나 풀이방법에 대해서 배울 때도 있습니다.따라서 초반에는 실전을 풀면서도 어 왜 안 풀리지? 라고 걱정을 할 때가 많습니다.
- 그러나, 아직 풀어보지 못한 유형이라 모르는 게 당연합니다. 다시 그 유형이 오면 풀 수 있을 거라고 생각하시고 다음 문제를 풀다보면 어느새 모두 풀 수 있는 유형이 되실거에요!
-
알고리즘은 머리로만 하는 것이 아니다.
-
많이 해보는 것
- 코딩은 학문이 아니라 기술입니다. 학문은 책으로 공부하는 것이지만 기술은 직접 해보고 배워야 합니다. 코딩을 수영에 비유할 수 있을 것 같다. 수영은 책으로만 배워서는 결코 실력이 늘 수 없다. 수영장에 가서 팔도 저어보고 다리도 저어보고 해야 실력이 늡니다. 코딩도 마찬가지다. 코딩 실력을 늘리고 싶다면 코드를 계속 짜봐야 한다. 수영실력이 물에 뜨는 원리를 깨닫는 순간 실력이 급격히 느는 것처럼 코딩도 특정 원리만 깨닫게 되면 실력이 부쩍는다. 코딩을 잘하려면 많이 해보아야 한다.
-
혼자서 해결하는 능력, 그러나 갈 길은 멀다.
- 프로그래밍이란 끊임없이 오류와 마주치고 그 오류를 해결하는 과정의 연속이다. 이 오류들을 혼자서 해결할 수 있느냐 없느냐에서 실력이 갈린다. 기어코 그 문제를 해결했을 때 얻는 깨달음도 더욱 크고 기억에도 오래 남는다.
그럼에도 불구하고 너무 모르겠다 싶으면 질문해라. 대신, 내가 어디까지 노력했고 어디까지 고민했다는 흔적만 보여줬으면 좋겠다. 그래야 본인에게 성장하는 밑거름이 된다.
지금 가는 길은 길고도 멀다. 벌써부터 지친다면 좋지 않다. 롱런하기 위해서는 멀리보자. 힘들다면 동료들에게 손을 내밀자.
- 알고리즘 테스트 공략법
- 알고리즘을 잘하기 위해서는 다음 3가지 요소가 필요합니다. 구현력, 문제해결능력, 배경지식
- 배경지식
- 기초적인 프로그래밍 문법 및 알고리즘, 자료구조 등을 아는 것 선형대수학과 확률 등과 같이 기본적인 수학적 지식을 아는 것과 같은 능력이다.
- 이 능력이 부족하면 문제를 풀 때 [ 어떻게 접근할지 몰라서 솔루션을 열었는데 생판 모르던 외계어가 적혀져 있다. ] 인 상황이다.
- 제일 공부하기 쉬운 능력이지만 지금 단계에서 가장 중요한 능력입니다. 시중에 있는 거의 모든 알고리즘 역량테스트 대비 강의 또는 책은 배경지식에 대해서 설명하고 있다. 제일 알려주기도 쉬운 능력이다. 다양한 매체를 통해 쉽게 공부할 수 있다.
- 상위권에 도달하기 위해서는 굉장히 지엽적인 자료구조나 알고리즘을 공부하기도 합니다. 그러나 그것까지는 딱히 필요없겠죠?
- 구현력
- 구현력은 본인이 생각한 알고리즘을 그대로 소스코드로 구현하는 과정이다. 프로그램 순서도를 명확하게 만들고 사용해야 될 변수나 함수의 데이터 타입등을 올바르게 정하는 과정이라고 생각할 수 있다.
- 이 능력이 부족하면 문제를 풀 때 [대충 어떻게 하라는지는 알겠는데 코딩하려니까 한 줄도 못 짜겠다.] 라던지 [내가 지금 뭘 짜고 있는지 모르겠다.] [코드가 10줄이 넘어가면 엄두가 안난다.] [디버깅을 못 하겠다.] 라는 생각을 느끼게 된다.
- 구현력을 향상 시키기 위해서는 [내가 어떤 프로그램을 만들고자 하는지]를 명확히 해야한다. [무엇을 입력받아 어디에 저장하고 어떤 과정을 거쳐서 중간 결과로 무엇을 얻고 최종적으로 이런 결과물을 이렇게 출력한다.] 와 같이 순서도를 먼저 적고 이제 디테일하게 어떤 데이터 타입 또는 자료구조에 저장할 지 생각하는 것을 차근 차근 종이에 적어가면서 연습하는게 좋다.
- 천천히 적으면서 순서도를 명확히 그리는 연습을 자주 하면 곧 머리속으로 하게 되고 나아가 코딩하면서 동시에 생각하는 수준까지 될 수 있다.
- 문제해결능력
- 내가 알고있는 알고리즘, 자료구조, 다양한 테크닉등을 지금 당면한 문제에 맞게 변형하여 적용하는 것, 문제를 창의적인 시각에서 접근하여 해결하는 능력은 가장 향상시키기 어려운 능력중 하나이다.
- 이 능력이 부족하면 문제를 풀 때 [ 어떻게 접근해야 할 지 모른다. ] [그래서 솔루션을 열었는데 내가 아는 알고리즘, 자료구조 ] 인 상황이다.
- 이 능력을 키우기 위해서는 [양질의 문제(30분 ~ 2시간 고민하면 해결 가능한 문제)를 푸는 것] [이전에 본인이 접근한 다양한 방법들을 잘 정리해 두는 것]이 좋다.
- 중위권에서 상위권으로 가고자 할 때 발목을 잡는게 결국 문제해결능력이므로 정말 벽을 뚫는다는 느낌으로 노력이 필요한 시점이다.
- 자료구조, 알고리즘 공부의 적정선 (어느 수준까지 하면 충분하다고 볼 수 있나)
- 코딩테스트에서 보고자 하는 것은 결국 [ 기초적인 배경지식 + 구현력 ] 이다.
- [코딩 문법] [시,공간 복잡도 분석] 을 아는 것, [배열, 트리, 그래프, 힙, BST, 스택, 큐]와 같은 기본적인 자료구조를 아는 것, [DFS, BFS, 정렬, 백트래킹, DP, 분할정복, 최단거리] 까지 배우면 됩니다.
- 더 극단적으로는 제가 본 코딩테스트의 반 이상에서 [DFS, BFS, 분할정복, 최단거리] 이 안 나왔습니다.
- 코딩 테스트는 경시 대회가 아니라서, 엄청 어려운거 안냅니다. 정 수준의 문제가 나오고, 문제가 급각하게 주어졌을 때 (힌트를 주면서라도) 100% 풀수 있냐 등을 본다.
- 안심시킬수 있는 경험담, 정보, 꿀팁 등등
- 배X, PXBG, 데X시스터즈, 지X재그, 리X북스 등등 코딩테스트를 통과했는데, 80% 이상의 문제가 중~중하 난이도다. 내준 문제 전부 다 푼다면, 이 회사들에서 코딩테스트 떨어질 일 없다고 단언할 수 있다.
- 면접 꿀팁을 주자면, 안 중요한 회사 → 중요한 회사 순으로 면접을 봐라. 그러면 면접 연습하다가 자신감이 점점 올라가서 폼이 극에 달한다. 그 때 가장 붙고 싶은 회사 면접을 보면 모든 것을 토해낼 수 있다.
- 알고리즘 테스트 vs. 개발 공부
- 알고리즘을 잘해야 개발을 잘한다? 절대 아니다.
- 다만 기본적인 구현력과 배경지식이 있어야 회사에 입사할 자격을 얻는다.
- 그 이후에는 자신의 학습 능력에 따라 개발자의 성장이 달려있다. 즉 시험 패스가 목표이고, 끝이 있는 공부이다. (취업 이직 전에 특히)
- 알고리즘은 공부법이 존재하고, 전략/공략법을 알고 있으면 도움이 많이 됨
- 개발 공부는 정말 끝이 없습니다.
Copyright ⓒ 딩코딩코 All rights reserved.