개발자에게는 코딩 테스트를 요구하는 것이 당연하게 여겨집니다. 하지만 데이터 직군(분석, 과학, AI) 직무는 회사 상황이나 요구사항에 따라 Python 알고리즘부터, 라이브러리를 이용한 문제 해결, 과제 전형 등 다양한 방식으로 진행됩니다. 이런 상황에서 데이터 직군은 알고리즘을 알아야할까요? 이번 글은 문제를 실제로 보면서 푸는 로직을 공유하고 실제로 데이터 과학자에게 알고리즘 공부가 필요한지 논의 해보는 글입니다. 


1. 질문

https://school.programmers.co.kr/learn/courses/30/lessons/135808

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def solution(k, m, score):
    score.sort(reverse=True) #사과 점수 내림차순으로 정렬
    result = 0
    while len(score) >= m:
      box = score[:m] #사과를 점수가 높은 순부터 4개 뽑기
      result += min(box)*m #4개 뽑은 것 중에 가장 낮은 점수 곱하기 * 사과개수 
      del score[:m] #꺼낸 사과 제거
    return result
  • 실행 결과

  • 학생질문) 시간 초과로 일부 테스트는 실패라고 뜨는데 왜 그런지 궁금합니다. 그럼 이 문제는 다른 방법으로 풀어야 하는 것일까요?

2. 나의 대답 전문

2.1 알고리즘 채점 방식

파이썬 알고리즘 문제는 후반으로 갈수록 좀 정교한 방식으로 채점됩니다. 문제를 해결하기 위한 논리와 효율성이 그것입니다. 위 코드에서는 효율성이 문제가 됩니다.보통 알고리즘 문제는 1초안에 수행되어야합니다. 위 코드를 돌려보면 6번 문제부터 100ms가 소요되는 걸 확인할 수 있어요. 그렇습니다. 코드 어딘가에 굉장히 속도가 많이 걸리는 것을 알 수 있습니다.

2.2 현 코드의 문제

결론만 말하자면, 반복문 혹은 정렬 등에 관련된 구문이 속도를 잡아 먹습니다. 위 코드에서는 del score[:m] 구문입니다. score가 가장 큰 경우는 100만개입니다. 반면 최소값은 m이 3입니다. 이런 최악의 경우 다음과 같이 진행됩니다.

  1. 사과 상자를 정렬함 (<- 사실 이 정렬속도도 매우 큽니다.)
  2. 100만개의 사과 중 3개를 뽑아냄. 그 이후 나머지 사과를 앞으로 3칸씩 "당김"
  3. 999,997 개의 사과중 3개를 뽑아냄. 그 이후 나머지 사과를 앞으로 3칸씩 "당김"
  4. 반복

del 연산이 자체적으로 데이터를 앞 당기는 상황입니다. 100만개를 모두요! 언제까지? while문이 끝날 때 까지. 그래서 문제가 되고 실제로 다음 코드를 돌려보면 시간이 매우 걸리는 것을 확인할 수 있습니다. 문제 11번 부터 시간초과라고 뜨는 이유가 해당 테스트에서 score길이가 길어서 그래요! 더 깊게 알고 싶다면 시간복잡도 개념을 검색해보시면 됩니다.

2.3. 개선 코드

기존 코드를 바꾸는 것도 고민해봤지만, for문으로 변형하는게 제일 합리적입니다. 일정한 사과의 갯수를 포장하는 것은 range(start, end, step) 함수를 이용해서 만들 수 있거든요. 

def solution(k, m, score):
    score.sort(reverse=True)
    result = 0

    # m-1 인덱스부터 리스트 끝까지 m씩 건너뛰며 반복
    # 이 인덱스들이 각 상자의 최저 점수가 됨
    for i in range(m - 1, len(score), m):
        result += score[i] * m
    return result
위 코드를 돌리면 기존 문제 6번이 100ms 에서 6ms 로 16배 빨라졌습니다!

2.4. 검증해보기

100만개의 사과를 테스트 해보면 시간이 너무 오래걸려서 10만개로 가정하고 테스트해봅니다. chagpt한테 만들어달라고 하면 금방 만들어줘요

import time
import random

# 1. 기존의 while문 방식
def solution_original(k, m, score):
    score.sort(reverse=True) #사과 점수 내림차순으로 정렬
    result = 0
    while len(score) >= m:
      box = score[:m] #사과를 점수가 높은 순부터 4개 뽑기
      result += min(box)*m #4개 뽑은 것 중에 가장 낮은 점수 곱하기 * 사과개수 
      del score[:m] #꺼낸 사과 제거
    return result

# 2. 개선된 for문 방식
def solution_improved(k, m, score):
    score.sort(reverse=True)
    result = 0
    for i in range(m - 1, len(score), m):
        result += score[i] * m
    return result

# 테스트 데이터 생성
k = 9 # 사과 최대 점수 (예시)
m = 3 # 한 상자에 담는 사과 개수
# 1~k 사이의 점수를 가진 100만개의 사과 리스트 생성
score_list = [random.randint(1, k) for _ in range(100000)]

# --- 기존 방식 시간 측정 ---
# 원본 리스트를 복사해서 사용 (sort가 리스트를 변경하므로)
score_copy_1 = score_list[:] 
start_time_1 = time.time()
solution_original(k, m, score_copy_1)
end_time_1 = time.time()
print(f"🐢 기존 방식 실행 시간: {end_time_1 - start_time_1:.6f}초")


# --- 개선된 방식 시간 측정 ---
score_copy_2 = score_list[:]
start_time_2 = time.time()
solution_improved(k, m, score_copy_2)
end_time_2 = time.time()
print(f"🚀 개선된 방식 실행 시간: {end_time_2 - start_time_2:.6f}초")

'''
🐢 기존 방식 실행 시간: 0.202289초
🚀 개선된 방식 실행 시간: 0.004085초
대략 50배정도 빠름!
'''

 

2.5. 이렇게까지 해야하나...

이런 해설을 보면 사실 이렇게까지 공부해야하나 싶으실거에요. 사실 알고리즘은 소위 개발자를 위한 테스트 시험이고, 우리가 sql을 공부하는 것처럼 준비해야하는 하나의  관문입니다. 분야도 depth 도 깊어요!  전공과목으로 있을 정도니까요근데 데이터 분석가의 지원하는 기업에 따라 일부 파이썬 기본문제를 요구하는 곳이있어요. 이런 "완전 구현" 문제(LG전자 전형)나 scikit learn을 활용한 유클리드 거리 계산(게임회사 크래프톤)이나 pandas를 활용한 문제들 출제합니다. 정말 중구 난방이긴해요 ㅋㅋ알고리즘을 푸는 것은 좋지만 너무 매달리고 개발자까지 공부할 필요는 없다는게 제 결론입니다. 완전구현, 이진트리, BFS, DFS 정도면 충분합니다.  이것도 사실 대기업 기준...  하지만  파이썬을 구현하고 더 깊게 팔수록 회사에서 기회가 더 많이 주어진다는건 명확해요. 요즘같은 LLM이 assist를 해주는 요즘 분석가와 같은 semi- IT직군이 LLM을 등에 타고 훨훨 날아가는 건 시간문제이니까요~ 잘 쓰려면? 잘 이해해야한다.말이 길었네요~ 여튼 대부분 알고리즘을 포기하는 지금까지 파이썬 문제를 잡고있다는건 노력도 많이하시고 열심히 하고자는 배경이 있다는 것이니까 꼭꼭 이점을 장점으로 가져가서 엔지니어링 스택도 가져가는 희귀한 데이터분석가가 되셧으면 좋겠습니다.  혹 또 궁금한거 있으면 찾아오세요~

3. 위 대답을 하게 된 이유

3.1. 시대적 배경

회사에서 나와서 좀 더 넓은 시야로 데이터 분야를 보다보니 직군에 대한 이해가 명확해졌다. 사실 데이터 분석가라는 직군은 정의된지 10년도 채 되지 않아서, 테크기업은 활발히 채용하고 있지만 대기업의 경우 이제 데이터 팀이 만들어지고 데이터 리터러시 문화가 도입되는 중이다. 

이런 흐름에서 사실 데이터 직군은 높으신 분들에서는 그저 IT직군 중 하나이다. 마치 병원에 제약사에 누가 방문해도 영원사원1, 2 처럼 의사 선생님이 생각하시는 것 처럼.. 이런 상황에서 데이터 팀은 자신의 specialty는 추구미로 유지하되, 회사와 시대가 요구하는 사항에 유연하게 pivot 할 필요가 있다. 다시 말해 "저 분석 만 할거에요!"라고 자신의 기능을 제한하기 보다는 "데이터로 볼 수 있는 문제를 해결하는 사람"으로 추구미를 갖는 것이 장기적으로 유익하다. 그런 관점에서 데이터 잡부라고 속칭 자책하는 분들은 어찌보면 다양성을 갖춰가는 과정일 수 있다. 

그렇다면 "데이터로 문제를 해결하는 사람이"되기 위해서는 기능과 도구에 국한하면 안된다. Python으로 할 수 있는 것들이 굉장히 다양하므로 웹 프로그래밍, 자동화, 분석, ML, 통계, CS 등 하나씩 즐겨찾기를 해놓는 것이 좋다. 나는 이 관점을 가지게 된 이유가 LG 데이터사이언스 캠프로 튜터로 일했던 2023년이고 지금도 그 방향을 향해 하나씩 분할 정복해가고 있다. 당시 공부방향을 작성해놓았다.

https://blog.naver.com/bellepoque7/223107480964

 

[글또] 네? 데분 멘토링왔는데 알고리즘 2달 알려주라고요?

0. 글의 목적과 독자 지난 4개월간 Data Science 멘토링을 하면서 스스로 배웠던 것은 바로 Learning C...

blog.naver.com

3.2. 데이터사언스와 잡마켓

데이처 직군이 잡마켓에 잘 적용하기 위한 방안에 대한 다음 글을 추천해본다. 유료 글이라 요약하면 다음과 같다.

https://medium.com/@sohail_saifi/why-your-data-science-degree-is-becoming-worthless-and-what-companies-actually-want-177913b7b706

 

Why Your Data Science Degree Is Becoming Worthless (And What Companies Actually Want)

Do you recall when it was declared that “data science is the sexiest job of the 21st century”? Yes, the honeymoon period is officially…

medium.com

 

1. 변화의 배경
과거: 2020년 팬데믹 시기에 기업들은 너도나도 데이터 과학자를 고용했지만, 이들 중 상당수가 이론에만 강하고 실제 서비스에 모델을 적용하지 못하는 문제를 겪었습니다. 현재 기업들은 이론적인 모델이 아닌, 실제 문제를 해결하고 비즈니스에 가치를 창출하는 실용적인 솔루션을 원하게 되었습니다. 이로 인해 많은 데이터 과학자들이 해고되었고, 채용 기준도 바뀌었습니다.

2. 학위의 한계와 요구되는 기술
학위의 문제점: 기존 데이터 과학 학위 과정은 확률 분포나 통계적 추론 같은 이론에 치우쳐 있어, 실제 현장에서 필요한 코딩이나 모델 배포 등의 기술을 제대로 가르치지 못합니다.

기업이 원하는 기술: 기업들은 데이터 파이프라인 구축, 클라우드 인프라(AWS, Azure 등), 컨테이너(Docker, Kubernetes), API 개발 등 실무에 바로 투입될 수 있는 기술을 가진 전문가를 찾고 있습니다. 특히, AI와 자연어처리(NLP) 관련 기술에 대한 수요가 급증하고 있습니다.

3. '만능 데이터 과학자' 시대의 종말
전문성의 중요성: 이제 기업들은 모든 것을 아는 만능형 데이터 과학자 대신, 특정 분야에 특화된 전문가를 원합니다. 머신러닝 엔지니어, 데이터 엔지니어, AI/ML 전문가, 분석 엔지니어 등으로 역할이 세분화되고 있습니다.

4. 살아남기 위한 전략
데이터 과학 분야에서 성공하려면 학위만으로는 부족합니다.
- 실제 배포 경험 쌓기: Docker, 클라우드 플랫폼(AWS, Azure 등), API 배포 등을 직접 경험해야 합니다.
- 데이터 엔지니어링 기본기 다지기: SQL, 데이터 웨어하우징, Apache Spark 등 데이터 처리 기술을 익혀야 합니다.
- 비즈니스 문제 해결에 집중: 기술을 비즈니스 문제 해결에 적용하고, 비전문가에게 결과를 명확히 설명하는 능력을 길러야 합니다.
- 특화된 분야 선택: LLM/NLP, 컴퓨터 비전, MLOps 등 수요가 높은 분야를 선택해 전문성을 키워야 합니다.

결론적으로, 데이터 과학 분야는 여전히 유망하지만, 이론적 지식에만 머물지 않고 실제 문제를 해결할 수 있는 실무 역량을 갖춘 인재를 필요로 하는 방향으로 진화하고 있습니다.

3.3. 그래서 알고리즘을 알아야하는가? 라는 질문에는

상황에 따르지만 나는 "한번쯤 공부해볼 만하다" 라고 대답한다. 우리의 세부 전공은 회사와 시대에 따라 달라질 수 있고, 그 기반이 되는 것이 튼튼한 기초 지식이다. 사실 이건 알고리즘에 국한하는 것이 아니라 CS, 통계, 클라우드 등 데이터로 문제를 해결하기 위한 앞뒤의 기반들을 포괄한다. 종합적인 관점에서 만약, 구직/이직하는 회사가 코테를 요구하면 최소한의 '완전 구현' 유형이라도 이직 준비할겸 해보길 바란다.  대기업과 같은 일반적인 역량을 요구하는 곳일 수록 더 알고리즘 테스트를 요구할 확률이 높다. 왜냐? 대기업은 한 명을 뽑아서 장기적으로 사용하는 것을 고민하기 때문이다. 일반적인 역량이 있는 사람을 좋아한다. 또한, 본인이 장기적으로 데이터 직군의 과도기를 거쳐 매니저 레벨까지 가고 싶으면 해보아라. 기본기에 가까운 CS와 같은 내용이 좋다. 나는 이런 책들을 하나씩 읽고 기록해나고 있다.

https://snowgot.tistory.com/194

 

DataScience를 위한 엔지니어링 책 추천

Last Updated 2025.05.21.지난 통계학/데이터사이언스 책 추천에 이어서 엔지니어링 관련 책 추천을 해보려 합니다. 데이터 사이언스에서 CS, 백엔드, 프론트, 네트워크, 데이터 모델링 등 필수적이진

snowgot.tistory.com

+ Recent posts