개발자

알고리즘 문제 푸는데 간결한 코딩을 지향해야 하나요?

2023년 03월 11일조회 3,525

안녕하세요 최근에 처음으로 codewars에서 알고리즘 문제를 풀어보고 있습니다. 문제를 풀어보니 답은 맞긴하지만 다른 사람들의 코드를 보니 엄청나게 짧더라구요. 문제를 풀 때 코드를 최대한 짧게 하려고 노력해야 하나요? 나중에 코테를 본다면 결과만 확인하나요? 아니면 작성한 코드까지 평가가 되나요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 7

인기 답변

김석현님의 프로필 사진

안녕하세요! 제가 알기로는 단순히 점수만 확인하지는 않는 걸로 알고 있어요. 따라서 알고리즘 대회를 나가는 게 아니라, 기업의 코딩테스트를 준비하시는거면 코드의 가독성까지 염두에 두고 문제를 푸시는 게 좋습니다. (물론 어떻게든 정답을 맞추는 게 항상 최우선입니다.) 아시겠지만 코드의 가독성이란게 간결한 정도와 절대적으로 비례하지는 않을 것이니, 변수명이나 함수명은 역할에 대한 의미를 최대한 내포하고 있는게 좋을거에요. 글쎄.. 도움이 될 지는 모르겠지만, 아래 제 github 링크를 한 번 드려볼게요. algorithm 또는 data-structure 디렉토리를 타고 들어가시면 문제들이 나올거에요. 어떤 느낌인지만 살짝만 보고 나오시면 될 것 같습니다ㅎㅎ https://github.com/sekhyuni/computer-science/tree/main

profile picture

익명

작성자

2023년 03월 15일

감사합니다~!!

김경표님의 프로필 사진

김경표

사피온코리아 매니저2023년 03월 16일

잘 알려진 코테관련 도서에 보면 짧은 코드는 더 적은 에러를 포함할 가능성이 높고 디버깅하기 쉽다는 장점이 설명되어있는 것으로 기억합니다. 코테를 통해 의도적으로 짧고 간결한 코드를 작성해보는 것 자체로도 개인적으로 많은 도움이 되었던 것 같네요 ㅎㅎ

김태경님의 프로필 사진

김태경

삼쩜삼 백엔드 개발자2023년 03월 16일

요즘 코테에서 gpt를 이용한 부정행위를 고려하고 있는지 문득 궁금하네요

김석현님의 프로필 사진

김석현

QANDA Frontend Engineer2023년 03월 16일

아래에 추가로 댓글을 달아주신 분들께서 복잡도관련된 말씀들을 해주셨는데요, 어쩌면 제가 이쪽 부분은 놓친 것 같아요. 굳이 핑계를 대자면, 제가 "정답을 맞추는 것"이라고 표현한 것에는 사실 효율적인 복잡도(시간 또는 공간)까지 포함한 의미이긴 했습니다. 왜냐하면 알고리즘 사이트에 따라 조금씩 다르겠지만 대부분 채점되는 과정에서 시간 또는 공간적 제약을 둔 상태로 채점되기 때문입니다. 예컨대 시간 복잡도의 관점에서 말씀드리면, 같은 문제에 대해 동일한 결과를 낸다고 하더라도 선형 탐색을 하느냐 이분 탐색을 하느냐에 따라, 선형 탐색으로 풀면 애초에 정답으로 채점되지 않을 것이며 이분 탐색으로 풀어야만 정답으로 채점될 것입니다. 아래는 이분 탐색으로 풀어야만 맞출 수 있는 예시 문제 링크들인데요, 프로그래머스: https://school.programmers.co.kr/learn/courses/30/lessons/43238 리트코드: https://leetcode.com/problems/guess-number-higher-or-lower/description/ 이 문제들을 선형 탐색으로 풀 경우, 프로그래머스에서는 "실패 (시간 초과)"라고 뜨며, 리트코드에서는 "Time Limit Exceeded"라고 뜨면서 정답 처리가 되지 않습니다. 애초에 입력값의 범위에 따라 복잡도가 효율적이지 않으면 답이 틀린다는 이야기입니다. 아무쪼록 문제를 맞추는 것(효율적인 복잡도 포함)이 항상 최우선적이며, 문제를 다 풀고도 시간이 남았을 때 가독성 측면까지 고려해서 리팩토링해주신다면 가장 이상적인 시나리오로 코딩테스트를 통과하실 수 있을 것 같습니다.

인기 답변

lecarap님의 프로필 사진

보통 코드포스, 앳코더와 같은 대회 프로그래밍 사이트나, SCPC 혹은 ICPC와 같은 프로그래밍 대회에선 동일한 갯수의 문제를 풀거나 점수를 얻었다고 가정했을 때 빠르게 풀수록 더 높은 순위를 차지할 수 있습니다. 즉 문제를 빨리 해결할수록 유리하다는 것이죠. 그렇기 때문에 프로그래밍 대회에선 일반적으로 가독성을 고려하지 않고 빠르게 코드를 짜는 경우가 많습니다. 그런 분들이 어떻게 코드를 쓰는지 궁금하시다면 유튜브에 gennady korotkevich라는 분이 코딩하시는 영상을 보시는 걸 추천드립니당 코테에선 제가 알기론 가독성 고려 여부는 케이스 바이 케이스인 걸로 압니다. 일단 해당 기업의 면접후기를 보시고 코딩테스트 코드리뷰를 한다고 한다면 가독성을 고려하시는 것이 좋고 그렇지 않다면 가독성에 신경을 쓰는 건 무의미할뿐더러 과하게 시간을 쏟는 건 오히려 독이 될 수 있습니다 이와 관련해선 아래에 있는 영상을 보시는 걸 강추드립니다 https://youtu.be/bpXiz5ruXr4

김석현님의 프로필 사진

김석현

QANDA Frontend Engineer2023년 03월 19일

다른 시각에서 설명해주셔서 감사합니다. lecarap님께서 말씀해주신 것처럼, 다시금 생각해보니 아무래도 기업들 중에서 단순히 점수(복잡도 포함)만 확인하고 합불을 결정하는 곳이 좀 더 많을 것 같단 생각이 드네요! 저의 경우엔 몇몇 기업에서 코딩 스타일까지 확인할거라는 사전 안내를 받은적이 종종 있었어서 가독성까지 염두에 두는걸 권장드렸던 것인데, 그런 기업이 아니라고 한다면 오히려 추가적인 시간 소모로 인해서 독이 될 수도 있을 것 같습니다.

🎗류대환님의 프로필 사진

맞는지 틀린지는 기본이고 보통은 시간복잡도, 공간복잡도 체크를 합니다..

양성연님의 프로필 사진

저는 비전공자라 최근 독학으로 알고리즘을 공부 중인데 , 중요한 건 시간복잡도 인듯 합니다!

김상현님의 프로필 사진

숏코딩은 취미일 뿐이지 복잡도가 더 중요하다고 생각됩니다. 시간이 부족한 코딩테스트에서는 기대하기 힘들지만 가능한 가독성 좋은 코드면 더 좋구요. 보통 숏코딩 풀이가 좋아요를 많이 받는데 코드 길이가 짧다고 복잡도 또한 좋다고 말할 수 없겠지요

권태형님의 프로필 사진

어떤상황 혹은 내가 알고리즘 문제를 푸는 목적이 무엇인지에따라서 케바케라고 생각합니다 내가 빠르게 많이 풀어야하는 코딩테스트를 연습할 목적이면 당연히 빠르게 푸는걸연습하기위해서 코드가독성을 위한 리팩토링과정은 우선순위가 낮아지는게 맞을 것 같습니다 반대로, 알고리즘 문제를 통해서 작은 비즈니스로직을 구현해보는 연습을 한다고 생각하면, 시간이 좀 오래걸려도 가독성좋은코드를 작성하기위해서 고민해볼 수 있는것이구요 저 개인적으론, 알고리즘 문제를 푸는 이유가 알고리즘 학습의 목적도 있지만, 내가 쓰는 언어의 여러기능들을 활용해서 풀어보고 익히는 목적도있고, 가독성 좋게 리팩토링하는 연습 용도로도 많이 활용합니다(다른 사람의 코드를 보고 제 코드를 다시 고쳐보기도 하고, 다른사람의 코드를 제 입맛에 맞게 고쳐보기도 합니다)이런 목적으로 인해서 사실 저에게는 빨리 푸는게 그리 중요하지 않습니다 이런 맥락에서 케바케로 볼 수 있을 것 같네요 기본적으론 문제의 조건에 맞게 풀어서 기대값대로 실제 값이 시간복잡도와 공간복잡도를 고려해서 나오도록 하는게 맞다고 생각합니다 여기에 본인의 목적에 맞게 사용하면 되지않을까 하는 의견입니다

송동훈님의 프로필 사진

간결하게 한줄로 딱 나오면 멋있어 보이긴 하지만 결국 문제의 해답은 문제를 빠르고 효율적으로 해결하는데에 목적이 있어, 복잡도의 차이가 없다면 가독성이 더 좋은 해답이 더 좋지 않을까 생각해봅니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!