본문 바로가기
여담

백준 다이아 달성 후기, 나와 PS

by oculis 2023. 3. 27.

내 옆의 개발자, LINT 를 오픈하였습니다.

웹사이트가 필요하면 언제든 연락주세요.

주식 가격을 예측하고 랭크를 올리는 커뮤니티, 오떨 을 오픈하였습니다.

지금 접속하고 예측을 시작해보세요.

728x90

다이아를 찍었다. 2021년 7월 13일에 15964 문제를 풀면서 시작한 백준이 어느덧 다이아까지 왔다. 1년 반 정도 걸렸다. 문제 당 제출 수가 상당히 많은데, DP나 그리디가 뭔지도 모를 때나 자료구조에 대한 개념이 하나도 없을 때 침착하게 배울 생각은 안하고 무작정 달려들어 얻어 터지느라 그랬다.

레이팅=실력이냐? 하면 어느 수준부터 다들 아니라 생각할 것이고 나 또한 그렇다. 그냥 오랜 기간 관심을 둔 분야에서 성과를 낸 것 같아 뿌듯해 후기를 적어본다. 레이팅 올리는 데에 도움이 많이 된 방법을 소개해볼테니 관심있으면 읽어보시라.


1. 브실 : 무엇보다 문제에 얻어터지기.

간혹 남의 풀이를 보라는 말이 있는데, 자기가 아직 브실골이고 골드 문제가 안 풀린다면 프로그래밍 사고에 도움이 되는 문제들이 많으므로, 최소한 서너시간은 한 문제를 고민해보고, 검색을 했을 때 내가 모르는 전공 냄새 폴폴나는 단어가 나온다면 그 한 문제만 읽어보는게 좋다. 나머지 문제는 그때 배운 새로운 개념을 응용해 푸는 것이 좋다. 그 전에 자신만의 독특한 풀이가 나온다면 더 좋다.

수능을 공부할 때도 법칙처럼 적용되는 것인데, 절대 해답지를 쉽게 보지 말라는 말이다. 그래야 다음 개념을 공부할 때 이해와 응용이 빨라진다. 그리고 이 응용과 지식습득의 과정이 모든 배움과 학습의 핵심이자, 코드포스와 같은 CP문제를 푸는 능력의 핵심인 것 같다. 내가 이걸 못해서 초딱이로 강등됐다.

틀리는 것을 두려워하지 말자. 제대로 배운 사람이라면 절대 모르는 것을 비난하지 않는다. 대신 배우는 입장에서 겸손하고 꾸준히 배움을 추구하자. 새로운 도전을 준비하는 사람에게 꼭 해주고 싶은 말이다.


2. 골드 : PS의 세부 분야를 구조화하면 좋다.

문제를 풀면 풀수록 이 PS라는 분야의 세부분야가 엄청나게 많다는 것을 알 수 있다. 그리고 자료구조를 하나씩 배우다보면 응용분야도 다양하겠다는 생각을 할 수 있다. 예를 들면 지도 프로그램에서 행정구역을 구분할 때 뭔가 볼록껍질이 쓰이지 않을까? 하는 생각도 해볼 수 있고, 실제 일상에서 사용되는 검색의 문자열 알고리즘이나, 이전에 말한 네트워크 플로우 알고리즘 같은 것들도 어렴풋이 "응용이 되겠거니" 하는 느낌을 받을 수 있다.

어차피 학부 수준에서는 이런 느낌만 잘 받아도 충분할 것 같다. 응용이 되는지 안되는지는 나도 모른다. 내가 전문가도 아니고. 다만 공부의 과정에서 이 세부 분야를 잘 파악하고 큰 그림을 그려둔다면 두고두고 도움이 될 것이다. 마치 포켓몬 같은 것이다. DP가 진화하면? Knapsack과 같은 DP응용, 여기서 더 진화하면 휴리스틱으로 시간복잡도 줄이기 처럼 이 분야는 정형화된 틀이 있고 그걸 잘 배우는 게 중요하다. 프로그래밍 이라는게 어디 천재들이 번뜩이는 생각으로 팍팍 풀어내는 게 아니라는 것이다.

얻어터지다가 벽이 크게 느껴지는 순간이 올 것이다. 골드5, 골드1, 플4 쯤에서 한 번씩 '어케하노' 남발하면서 접을 생각만 들 때가 있을 텐데, 그렇다면 이 PS라는 분야의 핵심 세부분야가 무엇이고, 뭘 배워야 할 지 체계화를 해보면 좋다.


3. 플래 : 티어'만' 올리고 싶다면

진짜 다른 건 모르겠고 티어는 올리고 싶은데 남의 정답 보고 싶지는 않다면 좀 얍삽이긴 한데, 하나의 개념을 잘 배워두면 어차피 응용은 거기서 거기라 쉽게 풀 수 있는 문제들이 많다.

  1. 볼록껍질, 선분교차 등의 기하학 개념은 개꿀이고 문제도 많다. 3차원 벡터를 수능에서 다루던 세대는 아주 이지하니 잘 뜯어먹어보자.
  2. 세그먼트 트리는 근본이다. 한 번 배울 때 제대로 배우자. 절반으로 나눈다는 개념만 잘 생각하면 풀 수 있는 문제가 많다. BOJ book도 있으니 잘 읽어보고 득점해보자.
  3. 정수론, 소수판정 개념은 정말 쓸모가 하나도 없는데 재밌고 문제도 많다. 애초에 수학적 센스를 가지고 있으면 두고두고 도움되니 "다 인생의 좋은 경험이다" 생각하면 좋다.
  4. FFT, 분할정복을 이용한 거듭제곱, 삼분 탐색같은 마이너한 개념도 좋은데 이런 개념은 이해를 못했다면 시작도 하지 말자. 모르는 내용의 문제를 풀기만 하는 것만큼 바보같은 짓이 없다.

이외에는 게임할 시간에 문제 한 문제 더 풀면서 하다보면 어찌저찌 되는 것 같다.


나머지 얘기는 나와 PS에 대한 얘기니까 심심하면 읽어보시라..

1. 나와 PS : 왜 시작했나?

나는 공부를 잘 하는 학생은 아니었다. 학군이 좋은 동네도 아니었고, 그 중 뛰어난 수준도 아니었다. 알고리즘 문제를 잘 푸는 사람들을 보면 보통 KOI나 KMO 등의 올림피아드를 접하고 과고 서카포 테크를 타는 경우가 많은 것 같은데, 나는 그 어디에도 속하지 않았다.

프로그래밍을 처음 접한 건 중3이었다. 정보 선생님이 C언어의 기본 입출력과 if, for문을 가르쳐주셨는데 무의식 중에 흥미를 느낀 것 같다. 고등학생 때는 많이 엇나가다 두 개의 학교를 다녔다. 첫 학교에서 우연히 과기대의 아두이노 프로그램에 참가할 기회가 있었고 그게 내 인생 두 번째 프로그래밍 경험이었다. 대부분 짜주셔서 딱히 기억은 없다.

동네 학교로 돌아와 졸업을 했고, 종합 내신은 2.8 이었다. 학교에서 서울대는 2년에 한 명 꼴로 갔는데, 그럼 이게 썩 좋은 성적은 아니란 걸 알거다. 재수를 했고 서성한 언저리에 입학했다. 부모님과 사이가 안좋아서 학원도 안다니고 인강도 안듣고 동네 도서관에서 EBS로 공부했다. 진짜 죽는줄 알았다. 아무튼, 1학년 때 C언어 콘솔로 당구게임을 만들었는데 처음 400줄 규모의 코드를 짰다. 지금 생각하면 백준 구현문제 하나 정도의 수준이었지만 처음으로 프로젝트를 해 본 경험이었고 "왜 안됨?" 을 수십 번씩 할 수 있던 좋은 경험이었다.

그리고 한동안은 코딩을 접할 기회가 없었다. 2학년 때 교수님께서 소개해주신 머신러닝 인터넷 강의에서 MNIST 같은 걸 구현해본 게 끝이다. 그러다 2020년 12월, 한동안 돈벌이에 미쳐 살다가 우연히 코딩 과외를 하게 될 기회가 생겼다. 프로그래머스라는 PS사이트의 문제풀이를 해달라고 하셔서 과외를 시작했다. PS는 해본 적도 없었는데 PS과외를 한 것이다. ㄹㅇ 어케했노;

이런 분야가 있고 기업이 코딩테스트로 지원자를 일차적으로 거른다는 것을 처음 알았다. 문제마다 3-5개의 풀이를 작성하고 만나서 해설해드리는 방식으로 과외를 진행했다. 나에게도 꽤 많은 도움이 됐고, 과외는 끝났지만 이게 생각보다 재미있어서 파이썬으로 200문제 정도를 풀었다. 그러다 백준이라는 사이트를 어디서 어렴풋이 들었던 게 기억났고 그때부터 백준을 시작한 것이다. 프로그래머스에서 파이썬을 쓰던게 진절머리가 나서 파이썬은 쳐다도 안봤다. 그리고 어쩌다보니 여기까지 왔다.


2. 왜 하는가?

이 분야에 진지한가? 하면 솔직히 말해서 떳떳하게 그렇다 대답할 수는 없다. 좋아하고, 많은 시간을 투자하지만 "그래서 네카라쿠배당토+ 보내주면 감?" 하면 갈 실력은 되나 모르겠는데, 보내준대도 일단은 아직 잘 모르겠다. 그냥 좋아하고, 재밌어서 하고 있다.

그런데 일상에 도움이 안되냐하면 그건 또 아닌 것 같다. 개인적인 생각으로 현대인의 필수는 프론트엔드 능력이라 생각하는데, 이것만 잘해도 인생에 편한 점이 많아진다. 공부한 내용을 정리할 때나 가계부를 쓰고 싶을 때, 주식투자를 한다면 Open dart 같은 걸 크롤링할 때, 불편한 네이버 블로그 따위를 쓰는 것보다 풀 커스텀이 가능한 자기 사이트 하나 만들어서 돌리는게 장땡이다. 여기서 nodejs랑 리눅스를 조금 다룰 줄 알면 제한없는 응용이 가능해진다.

학교에서 사이트가 하나 필요하다 해서 이 방식으로 만들어 드렸다. 근로장학금만 받고 만들어드렸는데 자취방 IP에 학교 도메인이 찍혀있는 걸 보면 기분이 참 묘하다. PS는 이럴 때 도움이 된다. 만드는 기간을 줄이고 코드를 가볍게, 알아보기 쉽게 만들 수 있다. 간단한 프로젝트는 외부 라이브러리를 최소화해서 빠르게 동작하게 만들 수 있다. 그냥 기본적인 컴퓨팅 능력이 향상되는 것이다. 타자가 빨라지거나 VS code같은 프로그램에 익숙해지는 건 덤이다. "웹개발 할건데 백준 풀어서 뭐함?" 이라는 생각이 든다면 아까도 말했지만 "다 인생에 좋은 경험이다" 생각해보자.


3. 앞으로의 계획?

원래 목표는 다이아 까지는 아니었는데, 어쩌다보니 개꿀문제들을 찾아 개꿀을 빨고 여기까지 와버렸다. 2021년에는 SCPC도 나가보고 카카오 1차도 패스해보고 이랬는데 요즘은 그런것도 잘 안한다. 옛날에는 패기가 넘쳐서 그랬다보다. 사실 진또배기는 코드포스이기 때문에, 앞으로는 코드포스 레이팅 올리는 연습을 꾸준히 해야겠다. 안 나간 대회는 버추얼로 틈틈이 나가주고, 백준은 코포 연습용으로 쓰는게 좋을 것 같다.

가끔 내가 여기서 뭐하나 싶을 때가 많은데, 뭐 언젠간 도움이 되겠지 싶다. 그저 잡스가 말한 connecting the dots looking backward 할 시간이 오기를 기다리며 하나씩 dots를 만들어 나갈 뿐이다.

728x90

'여담' 카테고리의 다른 글

대중이 되려 하는가  (0) 2023.05.30

댓글