프로그래머스 코테를 잘 치고 싶다.

jinvicky·2025년 3월 31일

Algorithm - Java

목록 보기
64/68

대부분 코테가 프로그래머스 환경에서 이루어진다. 문제는 백준, 프로그래머스 등등으로 자유롭게 풀되, 코딩 환경은 프로그래머스로 맞추는 연습이 필요하다.
이번 포스팅은 알고리즘을 논하기 전에 하나의 시험을 어떻게 준비할 지에 대해 고민해본 글이다.

코테는 독서실에 가까운 환경에서 진행된다.

  • 볼펜으로 제한된 종이 1장 사용
  • 카메라 연동해서 직접 촬영
  • import 직접 해야 한다.
  • vscode나 인텔리제이처럼 자동 정렬 단축키 간편하지 않고 vim이 고작.

코드 정렬

프로그래머스의 기본 에디터 설정은 괄호 갯수만 맞춰주는 sublime 이다. vim으로 자동정렬하는 것도 좋지만 찾아보니 시간투자할 가치가 적다. 기본으로 가자.

Import하기

아래 import를 기본으로 적으면 can not find symbol 에러를 대부분 피할 수 있다.

import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;

사용할 변수명 정리

유지보수할 코드가 아니기 때문에 시험치는 동안만 구분갈 정도면 된다.
내가 자주 쓸 것을 정리해둔다. 길면 내가 더 헷갈린다.

  • 반복문 : i,j,k,h,q,it, item,
  • 자료구조 위주의 네이밍. -> 예) gMap, strArr,
  • 정답 : ans, answer, result,
  • 임시 : tmp, temp,
  • 조건 : cond, isValid, available,

난 이직하고 싶은 한국인이니까

코테는 SQLD 같다. 그냥 통과 의례같은 거야..... 처음에는 알고리즘 자체를 잘하고 싶어서 백준 갔다가, 리트코드에서 또 수십 문제 풀고, 지금 프로그래머스인데.... 공부하고 싶으면 CS를 더 하고 알고리즘을 정석대로 공부하려 하지 말자.
우리에게는 영어 문제를 해석할 시간도 없다는 것을 기억하자.
외국인들이 유툽은 좋은데 한국에서 이직할 거면 그냥 프로그래머스랑 백준 가자..

레퍼런스 가이드

개인으로 문제 풀때는 없는데 프로그래머스 코테를 치르게 되면 문제 옆 탭에 레퍼런스 가이드가 있다. map.entrySet()을 어떻게 썼는 지 기억이 안 나면 검색해서 참고할 수 있다. 근데 큰 기대는 안 했으면 좋겠다. 그냥 만일의 안심용이지, 모르면 레퍼런스 가이드 있어도 망한다.


이제 코테를 풀기 위한 계획을 세운다.

문제 파악

어떤 자료구조가 적합한가?

재료 고르기와 같다. 일단 재료가 뭐 있는 지부터 알아야 하기 때문에
자료구조 종류를 미리 적어두는 것이 좋다.

  • 추가적으로 문제를 풀지 말고, 문제만 보고 자료구조를 고르는 연습을 한다.
  • 문제를 제대로 파악했는지? 부터 다시 되돌아볼 필요가 있다. 요리에 따라서 재료가 달라지니까
  • 왜 그렇게 생각했는 지 말할 수 있어야 한다.

필요한 사전 준비는 무엇인가?

그리디 알고리즘을 생각해보면, 사전에 Arrays.sort(arr); 를 요구할 때가 많다. 이진 탐색과 그리디처럼 사전 정렬을 요구하는 알고리즘들인지 확인해야 한다.

재귀인가 반복인가?

난 재귀에 벌벌 떠는 사람이다. 이 성격이 dp에서 botom-up을 고르고, 탐색에서 dfs보다 bfs를 선호하게 만든다. 재귀를 못하는 이유는 탈출 조건 정립을 못하기 때문이다.

일단 반복문으로 풀 수 있다면 반복문으로 풀어야 한다. 초보자에게 재귀는 마법같기 때문에 단계적으로 풀이가 안된다. 그렇다고 재귀는 피할 수 있는 게 아니다.

이 자료구조를 정렬할 수 있습니까?

자료구조별로 정렬하는 법을 필수로 알아야 한다. 특정 자료구조는 정렬을 유지하고, 어떤 자료구조는 추가 변환 및 연산이 요구된다. 오름차순/내림차순 정렬 모두 해낼 수 있게 하자.

예시

  • 원시값, 문자열을 정렬하려면 우선순위 큐, 트리맵이 가장 편하다.
  • map을 value별로 정렬하려면 추가 연산이 필요하다.

회고와 재시작

내가 생각했던 알고리즘과 자료구조는 굉장히 막연했다. 풀어봐도 안되고, 주변 팁들, 강의들을 다 찾아다녀도 안되는데 이게 뭘까하면서 공부가 하기 싫었다.

푼 문제에 비해 얻은 것도 없고 진전도 없는 내가 깨달은 게 있다면

  • 코테는 목표없이 할 바엔 안 하느니만 못한 분야다.
    나중에 도움이 되겠지 마인드면 망한다.
  • 코테는 그냥 자격증 이상 이하도 아니다. 실무처럼 접근하지 말고 그냥 원하는 회사 가려고 벼락치기 공부한다고 생각해라. 그래야 공부를 질질 끌지 않기 때문이다.
  • 초보자는 성능 최적화 코드보다 자료구조 사용 패턴을 위주로 봐야 한다.
  • 알고리즘을 몰라서 못한 게 아니다. 구현부터가 안되는 것이다.
    코테들도 보면 수학 지식으로 거창한 걸 요구하지 않는다.
  • 자료구조를 그림과 코드로 배워야 한다. 책보다 영상과 블로그 그림을 봐야 한다. 자료구조를 책으로만 보면 답이 없다. 자료구조를 글로 풀어서 설명할 필요가 없다.
  • 코딩하는 동안은 무지성으로, 회고는 머리 아프도록.

코테는 분석과 수없이 쳐본 자료구조 템플릿이 전부다. 이 이후는 찐으로 잘하는 사람들 영역이겠지만 코테하면서 그냥 여기까지로 목표를 정하자.

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

다시 공부하러 가야지.

profile
개발, 그림, 기록

0개의 댓글