알고리즘 문제풀이에 대한 이야기

K_Gs·2023년 5월 28일
94

옥탑방 개발자

목록 보기
1/1
post-thumbnail

알고리즘

알고리즘 문제풀이(이하 PS)를 열심히 해왔습니다.

첫번째 백준 제출이 2017년이였고,
작년에 본격적으로 하였고,
지금도 하고 있습니다.

코드포스 블루, 백준 다이아를 달성하였고, '더해야할까'라는 생각이 드는 지금,
알고리즘과 PS 대한 생각 정리를 한번 해보려합니다.

이 글은 개인적인 생각, 의견을 정리해서 적은 글입니다.

알고리즘은 무엇일까

저는 알고리즘은 도구라 생각합니다.

적용할 수 있을 것 같으면 적용해 보는, 약간 디자인 패턴 같은 느낌.

열심히 문제풀고 하는건 가지고 있는 도구를 정비하며 사용법을 익히는 것 이고, 새로운 알고리즘을 배우는 건 새로운 도구를 장만하는 것이라 생각합니다.

좋은 도구가 있다면 후에 무언가 결과를 만들거나 사용할 때 도움이 되겠지만, 내가 이렇게 멋진 도구를 가지고 있어!만으로는 다른사람에게 크게 와닿지 않습니다.

내가 이런 도구로 이렇게 멋진 결과를 만들었어!이런 도구를 이렇게 사용했어!로 해야 사람들이 확인할 수 있습니다.

이런 결과에는 대회, 공모전, 프로젝트 등이 있습니다.

대회는 내가 이런 도구를 사용할 줄 안다!를 알려주고, 공모전, 프로젝트는 내가 좋은 결과를 만들 수 있다!를 알려주는 편이죠.

이런 도구를 사용하는 것 중에 문제를 푸는게 PS입니다.

PS는 어디에 쓰일까

알고리즘은 어디에 쓰여? 프론트? 백엔드?

친한 형이 받은 질문입니다.
알고리즘 자체는 구현에 조금씩 들어가며 다양한 곳에 쓰인다 답 할 수도 있지만 저 질문의 의도는 그게 아닙니다.

알고리즘이란 도구 그 자체와 PS를 동일하게 생각합니다.
그러니까 저 질문은 PS가 어디에 쓰이냐는 질문이죠.

둘이 분명 다름에도 많은 사람들이 같다 생각합니다.

아무래도 알고리즘이 가장 익숙하게 사용되는 분야가 코딩테스트(PS)이기 때문이지 않을까 싶습니다.

비슷한 질문을 저도 자주 듣습니다.

문제풀이를 왜 그렇게 열심히해?

저는 무언가 사유보다는 취미로 하고있어서 왜 하고있는지가 아니라, 왜 해야하는지를 생각해보기로 하였습니다.

이때 PS의 특징을 한번 생각해 봐야합니다.

  1. 문제를 보고 접근법을 떠올림
  2. 떠올린 접근법을 바탕으로 구현
  3. 문제를 풀며 시간복잡도, 공간복잡도 등을 고려

기본적으로 사고력, 문제해결력, 구현력, 최적화를 다 써야합니다.

이런 능력들은 대부분의 개발 분야에 필요한 것들입니다. 즉, 대부분의 분야에 필요한 능력을 기를 수 있는게 PS라 생각합니다.
(심지어 언어 문법 공부도 됩니다!)

하지만 이 PS가 개발자의 능력을 대변하지는 않습니다.
PS을 잘하는데 개발을 못할 수도 있고, 개발을 잘하는데 PS를 못할 수도 있습니다.

이런 단점이 있음에도 단체 입장에서는 많은 지원자를 평가해야하기에 사고력과 같은 능력들을 간단하게 볼 수 있는 코딩테스트를 보는게 아닌가 싶습니다.

PS공부를 어떻게 해야할까

다양한 문제를 다양한 방식으로 많이 풀면 됩니다.

이게 전부긴 합니다.

  1. 다양한 문제를 -> 문제의 형태 및 접근법 익힘
  2. 다양한 방식으로 -> 문제의 구현방법 익힘
  3. 많이 -> 반복.

어느 공부에서나 적용할 수 있지 않나 싶은 공부법입니다.

하지만 그러기엔 시간이 없다 싶은 케이스가 주변에 조금 보이는데 저는 그 때 적당하게 고민해보고 빠르게 답을 보는걸 추천합니다.

왜 그러냐면 약간 과장 더해서 코테나 대회에서 한문제 1시간 동안 구현 못들어가고 어캐 짤지 보고 있으면 망친겁니다.

그렇기에

대략 1시간정도 지났는데 알고리즘이 안떠오른다 -> 답 확인
1시간 정도 지났는데 구현중이다 -> 그대로 구현

이런 방식으로 해서 1시간 내에 구현 방법을 떠올리는 걸 연습하는 겁니다.

PS를 어디까지 해야할까

전 PS를 3단계로 봅니다

  1. 기본 소양
  2. 취미
  3. 대회 준비

기본소양은 하는게 맞습니다. PS에 몰빵해도 된다고 봅니다.

이때 기본 소양은 어디까지냐 할 수 있는데 타인이 정한 기준을 통과할 정도만 하면 됩니다. 보통 코딩테스트 통과할 정도, 딱 그 정도 이죠.

주변에서 졸업전에 백준 500문제 풀어라 하는 것도 이 라인입니다.

또한 타인이 정한 기준이기에 기본 소양은 제각각 다릅니다. 누군 백준 실버정도만 해도 되지만 누군 골드, 플레까지 봐야할 수도 있습니다.

개인적으로 이 기본 소양은 주변에 코딩테스트로 평가하는 케이스가 많아서 존재한다 생각합니다. 만약 코딩 테스트가 없었다면 PS 말고도 구현력, 컴퓨팅사고력 기를 수 있는 다른 걸 해도 되지 않나 싶습니다.


기본 소양을 충족시켰다면 그때부턴 취미라 생각합니다.

여기서 PS를 멈추고 프로젝트, 공모전을 할 수도 있고,위에 이야기한 대로 다른 방식으로 사고력을 기를 수도 있으며 그대로 PS를 취미로 할 수도 있습니다.

이렇게 기본소양을 끝마친 구간이지만, 한편으로는 조금 애매한 구간이기도 합니다.

이미지 출처 - 저세상개발자(링크)

이후론 PS를 열심히 해도 기본소양은 이미 넘어섰기에 대회를 준비하지 않는 이상 직접적으로 도움이 되진 않기 때문입니다.

이 즈음에서는 알고리즘에 더욱 집중해서 빠르게 대회준비를 할지, 아니면 성취와 자기만족으로 삼으면서 다른 개발공부를 겸 할지도 정해야합니다.

마무리

최근에 아는 형이 보내준 글 이 있습니다.
많은 내용이 있었지만 그곳에 뻔한 길이라 언급 된 게 있습니다.

처음에 언어 공부로 시작
알고리즘 문제를 풀고, 골드, 플레까지 가서 접음
CS공부를 함
원하는 분야의 개발 공부를 함
취직

제가 딱 저 길로 가고 있습니다.
저대로 가고 있다는 것이 조금 아쉽긴 하지만, 뻔한 길이라는 것이 결국 잘 다져진 길이라는 의미이기도 하겠죠.
조금 더 열심히 해봅시다.🍀

profile
아직도 모르는게 많으니, 알아가고 싶은 것도 많다

7개의 댓글

comment-user-thumbnail
2023년 5월 28일

와... 정말.. "졸업전에 백준 500문제 풀어라"를 제가 할 수 있을지 모르겠지만 도전해보겠습니다~

글이 너무 좋아요~!!! 이런 시리즈 자주자주 올려주세요~~

답글 달기
comment-user-thumbnail
2023년 5월 29일

하트 누르고갑니다...

답글 달기
comment-user-thumbnail
2023년 5월 29일

PS 공부를 시작하는데 많은 도움이 될 것 같습니다! 감사합니다~!

답글 달기
comment-user-thumbnail
2023년 5월 30일

공감이 되는 글이네요... 솔직히 PS의 필요성을 모르겠고.. 주변에서 하라고 해서 억지로 하는데 정말 좋은 글인 것 같아요..이런 좋은 글 써주셔서 항상 감사드립니다.!!!

답글 달기
comment-user-thumbnail
2023년 5월 31일

좋은 글 감사합니다.

답글 달기
comment-user-thumbnail
2023년 6월 2일

덕분에 알고리즘에 대해 막연하게 느끼고 있던 부분이 어느정도 구체화된 것 같습니다.
감사합니다

답글 달기

사고력, 문제해결력, 구현력, 최적화를 다 써야한다는 부분에서 와닿았습니다 잘 읽고갑니다

답글 달기

관련 채용 정보