[Do it 알고리즘 코딩 테스트] 1. 시간 복잡도

2025. 8. 5. 21:21·Algorithm

알고리즘 선택의 중요성

좋은 알고리즘을 선택하지 못한다면 문제에 적합한 좋은 코드는 나오지 않는다. 좋은 알고리즘을 찾기 위해선 시간 복잡도 개념을 알고 있어야 한다. 시간 복잡도는 주어진 문제를 해결하기 위한 연산 횟수를 말한다. 파이썬 프로그램은 1초에 대략 2천만번에서 1억번까지의 연산을 수행한다. 최악의 경우를 생각하는 빅-오 노테이션을 통해 1초에 2천만번의 계산을 진행한다고 가정하자.

 

 

시간 복잡도 활용하기

백준 2751 수 정렬 문제2를 보고 시간 복잡도에 대해 알아보자.

https://www.acmicpc.net/problem/2751

 

 

수 정렬하기 2

시간 제한 : 2초

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

 

 

제한 시간이 2초이므로 4,000만번 이하의 연산 횟수로 문제를 해결해야 한다. 최악의 경우를 가정하는 빅-오 노테이션을 활용할 때, 데이터의 수는 1,000,000개다.

내가 버블 정렬과 합병 정렬을 알고 있다고 가정하자. 버블 정렬은 O(N^2), 합병 정렬은 O(NlogN)이 시간 복잡도를 가진다.

버블 정렬을 활용할 경우 1,000,000^2로 1조의 연산을 가지는 반면, 합병 정렬은 4,000만의 연산 횟수를 가진다. 따라서 이 문제에서 좋은 알고리즘은 합병 정렬이 된다.

시간 복잡도는 좋은 알고리즘을 선택하는 기준이 된다.

 

 

 

시간 복잡도를 바탕으로 코드 로직 개선하기

알고리즘 문제를 풀다 보면 시간 초과가 가끔 나온다. 시간 복잡도를 활용하여 내 코드의 비효율적인 로직을 개선할 수 있다.

 

💡시간 복잡도 도출 기준

  • 상수는 시간 복잡도에서 제외한다.
  • 가장 많이 중첩된 반복문의 수행 횟수가 시간 복잡도의 기준이 된다.
N = 100000
cnt = 1

for _ in range(N):
	cnt += 1

for _ in range(N):
	cnt += 1
    
for _ in range(N):
	cnt += 1

 

이 코드의 시간 복잡도는 3N이다. 하지만 시간 복잡도를 계산할 때 상수는 무시하므로 이 코드의 시간 복잡도는 N이다.

시간 복잡도를 통해 코드 내 비효율적인 로직을 찾고 고칠 수 있어야 한다.

'Algorithm' 카테고리의 다른 글

[Do it 알고리즘 코딩테스트] 3-4. 슬라이딩 윈도우  (0) 2025.08.13
[Do it 알고리즘 코딩 테스트] 3-3. 투포인터  (0) 2025.08.09
[Do it 알고리즘 코딩 테스트] 3-2. 구간 합  (0) 2025.08.07
[Do it 알고리즘 코딩 테스트] 3-1. 배열과 리스트  (0) 2025.08.06
[Do it 알고리즘 코딩 테스트] 2. 디버깅  (0) 2025.08.05
'Algorithm' 카테고리의 다른 글
  • [Do it 알고리즘 코딩 테스트] 3-3. 투포인터
  • [Do it 알고리즘 코딩 테스트] 3-2. 구간 합
  • [Do it 알고리즘 코딩 테스트] 3-1. 배열과 리스트
  • [Do it 알고리즘 코딩 테스트] 2. 디버깅
BestTomaTo
BestTomaTo
  • BestTomaTo
    기록보관소
    BestTomaTo
  • 전체
    오늘
    어제
    • 분류 전체보기 (36) N
      • Algorithm (8)
      • Computer Science (3)
      • Backend (3)
      • DevOps (4)
        • Kubernetes (3)
        • Docker (0)
      • Data Engineering (8)
      • Cloud (2)
      • AI (1)
      • Security (3) N
        • SK Shieldus Rookies (3) N
      • Reference (2)
      • Project (1)
      • Experience (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    airlfow
    해커톤 후기
    홈 서버
    AWS
    langsmith
    3단계 모델링
    동기 프로그래밍
    SQLD
    langchain memory
    sql 개발자
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
BestTomaTo
[Do it 알고리즘 코딩 테스트] 1. 시간 복잡도
상단으로

티스토리툴바