
대부분 코테가 프로그래머스 환경에서 이루어진다. 문제는 백준, 프로그래머스 등등으로 자유롭게 풀되, 코딩 환경은 프로그래머스로 맞추는 연습이 필요하다.
이번 포스팅은 알고리즘을 논하기 전에 하나의 시험을 어떻게 준비할 지에 대해 고민해본 글이다.
코테는 독서실에 가까운 환경에서 진행된다.
프로그래머스의 기본 에디터 설정은 괄호 갯수만 맞춰주는 sublime 이다. vim으로 자동정렬하는 것도 좋지만 찾아보니 시간투자할 가치가 적다. 기본으로 가자.
아래 import를 기본으로 적으면 can not find symbol 에러를 대부분 피할 수 있다.
import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
유지보수할 코드가 아니기 때문에 시험치는 동안만 구분갈 정도면 된다.
내가 자주 쓸 것을 정리해둔다. 길면 내가 더 헷갈린다.
코테는 SQLD 같다. 그냥 통과 의례같은 거야..... 처음에는 알고리즘 자체를 잘하고 싶어서 백준 갔다가, 리트코드에서 또 수십 문제 풀고, 지금 프로그래머스인데.... 공부하고 싶으면 CS를 더 하고 알고리즘을 정석대로 공부하려 하지 말자.
우리에게는 영어 문제를 해석할 시간도 없다는 것을 기억하자.
외국인들이 유툽은 좋은데 한국에서 이직할 거면 그냥 프로그래머스랑 백준 가자..
개인으로 문제 풀때는 없는데 프로그래머스 코테를 치르게 되면 문제 옆 탭에 레퍼런스 가이드가 있다. map.entrySet()을 어떻게 썼는 지 기억이 안 나면 검색해서 참고할 수 있다. 근데 큰 기대는 안 했으면 좋겠다. 그냥 만일의 안심용이지, 모르면 레퍼런스 가이드 있어도 망한다.
이제 코테를 풀기 위한 계획을 세운다.
어떤 자료구조가 적합한가?
재료 고르기와 같다. 일단 재료가 뭐 있는 지부터 알아야 하기 때문에
자료구조 종류를 미리 적어두는 것이 좋다.
필요한 사전 준비는 무엇인가?
그리디 알고리즘을 생각해보면, 사전에 Arrays.sort(arr); 를 요구할 때가 많다. 이진 탐색과 그리디처럼 사전 정렬을 요구하는 알고리즘들인지 확인해야 한다.
재귀인가 반복인가?
난 재귀에 벌벌 떠는 사람이다. 이 성격이 dp에서 botom-up을 고르고, 탐색에서 dfs보다 bfs를 선호하게 만든다. 재귀를 못하는 이유는 탈출 조건 정립을 못하기 때문이다.
일단 반복문으로 풀 수 있다면 반복문으로 풀어야 한다. 초보자에게 재귀는 마법같기 때문에 단계적으로 풀이가 안된다. 그렇다고 재귀는 피할 수 있는 게 아니다.
자료구조별로 정렬하는 법을 필수로 알아야 한다. 특정 자료구조는 정렬을 유지하고, 어떤 자료구조는 추가 변환 및 연산이 요구된다. 오름차순/내림차순 정렬 모두 해낼 수 있게 하자.
예시
내가 생각했던 알고리즘과 자료구조는 굉장히 막연했다. 풀어봐도 안되고, 주변 팁들, 강의들을 다 찾아다녀도 안되는데 이게 뭘까하면서 공부가 하기 싫었다.
푼 문제에 비해 얻은 것도 없고 진전도 없는 내가 깨달은 게 있다면
코테는 분석과 수없이 쳐본 자료구조 템플릿이 전부다. 이 이후는 찐으로 잘하는 사람들 영역이겠지만 코테하면서 그냥 여기까지로 목표를 정하자.
map은 잘 알지~ 해도 레벨 올라가면 생각지도 못한 map의 응용이 나온다.
그럼 내 연관 지식에 트리처럼 추가해 가고 다시 무지성으로 손이 기억할 때까지 친다.
정말 노답이라면 남이 나한테 코드를 다 짜준다고 생각하고, 내가 원하는 자료구조 결과값을 생각해보자.
쿼리를 짤 때 필터링 이전에 조인으로 전체 data set을 만드는데 그 과정이라고 생각하기.
그리고 자료구조와 알고리즘은 == 관계가 아니다. 둘은 동일하지 않다...
슬라이딩 윈도우 알고리즘은 배열로 구현하지만 슬라이딩 윈도우는 알고리즘이고, 배열은 자료구조다.
집에 비유하면 알고리즘은 집을 짓는 방법이고, 자료구조는 집을 짓는 재료다.
재료는 바뀔 수 있지만, 문제를 해결하기 위한 알고리즘은 정해져 있다. 알고리즘대로 하려면 배열이 가장 최적이기 때문에 배열을 쓰는 거고...
유튭에서 자료구조를 이용한 패턴이 나온다. 아래 유튜버처럼 정리가 되어야 한다.
https://www.youtube.com/watch?v=DjYZk8nrXVY&t=68s
가끔 눈감고 넘어갈 때도 있고, 찝찝해도 다음에 더 잘하자 마인드가 있어야 합니다. 책을 좋아하는 범생이 마인드를 가지면 망합니다. 왜 정리를 하는 지 생각하세요. 혹독하게 나를 분석할 수 있어야 결과를 낼 수 있습니다.
네가 하루종일 뛰어다닌다고 해서 무언가를 항상 이루는 것은 아니다.
https://www.youtube.com/watch?v=4jdhrf_bUrw&list=WL&index=4&t=15s
다시 공부하러 가야지.