Skip to content
toylee blog
toylee blog

컴퓨터·IT 문제 해결과 최신 기술 정보

  • 홈
  • 컴퓨터 활용
  • 프로그래밍
    • 파이썬
    • 자바(Java)
    • Flutter
    • HTML
    • Linux
    • 워드프레스
  • 맥북
  • IT 일반
  • 블로그 소개
  • 문의하기
toylee blog

컴퓨터·IT 문제 해결과 최신 기술 정보

알고리즘과 자료구조 선택 가이드: 시간복잡도와 활용 예

toylee, 2026년 02월 17일2026년 08월 27일

알고리즘 문제를 풀 때 자료구조 이름을 많이 아는 것보다 어떤 연산이 얼마나 자주 필요한지를 먼저 적는 것이 중요합니다. 입력 크기와 필요한 연산을 확인한 뒤 가장 단순한 구조부터 선택하세요.

[목차]

  • 자주 쓰는 자료구조 비교
  • 빈도 집계: dict
  • 최단 간선 수: deque를 이용한 BFS
  • 상위 K개: heap
  • 선택 순서
  • 공식 참고자료
  • 관련 글

자주 쓰는 자료구조 비교

구조 강점 대표 활용
list/배열 인덱스 접근 순서 있는 데이터, 순회
dict/해시맵 키 조회의 평균 O(1) 빈도 집계, ID 조회
set 포함 여부의 평균 O(1) 중복 제거, 방문 확인
deque 양끝 삽입·삭제 O(1) 큐, BFS, 슬라이딩 윈도우
heap 최솟값 조회와 갱신 우선순위 큐, 상위 K개
트리 계층과 범위 표현 파일 구조, 구간 질의
그래프 관계 표현 경로, 네트워크, 의존성

Big O는 구현과 데이터 분포를 단순화한 모델입니다. 해시 충돌, 메모리 사용량과 캐시 효율도 실제 성능에 영향을 줍니다.

빈도 집계: dict

counts = {}
for word in words:
    counts[word] = counts.get(word, 0) + 1

각 항목의 빈도를 반복해서 검색해야 한다면 매번 리스트를 세는 방식보다 해시맵이 적합합니다.

최단 간선 수: deque를 이용한 BFS

from collections import deque

def distances(graph, start):
    distance = {start: 0}
    queue = deque([start])

    while queue:
        node = queue.popleft()
        for next_node in graph[node]:
            if next_node not in distance:
                distance[next_node] = distance[node] + 1
                queue.append(next_node)
    return distance

가중치가 없는 그래프의 최단 간선 수에는 BFS가 적합합니다. 가중치가 있으면 조건에 따라 Dijkstra, Bellman-Ford 등 다른 알고리즘을 검토해야 합니다.

상위 K개: heap

import heapq

top_k = heapq.nlargest(3, scores)

전체 정렬은 일반적으로 O(n log n)입니다. K가 입력보다 매우 작고 결과 일부만 필요하면 힙 기반 접근을 고려할 수 있습니다.

선택 순서

  1. 입력 최대 크기와 메모리 제한을 적습니다.
  2. 조회, 삽입, 삭제, 최솟값, 순서 유지 중 핵심 연산을 찾습니다.
  3. 완전 탐색으로 정답 조건을 명확히 합니다.
  4. 병목 연산만 더 나은 자료구조나 알고리즘으로 바꿉니다.
  5. 작은 입력과 경계값으로 검증한 뒤 측정합니다.

공식 참고자료

  • Python deque 문서
  • Python heapq 문서
  • Python bisect 문서

관련 글

  • 초보자를 위한 실전 코딩 문제풀이 학습법
  • 파이썬으로 시작하는 쉽고 재미있는 코딩

내용 검토 및 업데이트: 2026년 8월 27일

프로그래밍

글 탐색

Previous post
Next post

Related Posts

프로그래밍

리팩토링 기법과 예시

2023년 07월 13일

리팩토링은 소프트웨어 개발 과정에서 코드의 가독성, 유지보수성, 성능 등을 개선하는 기술입니다. 코드를 수정하지 않고, 구조와 설계를 개선하여 코드를 정리하고 디버깅 및 개선을 용이하게 할 수 있습니다. 이러한 기술을 활용하여 개발자들은 더 나은 소프트웨어를 만들어 나갈 수 있습니다. 리팩토링이란? 리팩토링은 코드를 수정하지 않고, 가독성과 유지보수성을 높이고, 불필요한 코드를 제거하여 성능을 향상시키는…

Read More
프로그래밍

자바스크립트 비동기 프로그래밍 패턴

2023년 07월 28일

자바스크립트는 단일 스레드 언어로, 동기적으로 실행되는 언어입니다. 그러나 비동기적으로 실행되는 코드를 작성하여 최적화된 성능을 얻을 수 있습니다. 비동기 코드를 작성할 때는 패턴을 이해하고 적용하는 것이 중요합니다. 이를 위해 다음과 같은 내용을 추가로 설명합니다: 비동기 프로그래밍의 필요성 비동기 프로그래밍의 장단점 자바스크립트에서 비동기 코드를 작성하는 이유 자바스크립트에서 비동기 코드를 작성하는 방법 콜백(Callback)…

Read More
프로그래밍

성능 테스트와 프로파일링 방법

2023년 07월 28일

성능 테스트와 프로파일링은 소프트웨어 시스템을 최적화하는 데 매우 중요한 도구입니다. 이번 글에서는 성능 테스트와 프로파일링의 개념 및 방법에 대해 자세히 알아보겠습니다. 성능 테스트 성능 테스트는 소프트웨어 시스템의 성능과 안정성을 평가하는 과정입니다. 이를 통해 시스템이 예상한 대로 동작하는지 확인하고, 사용자가 만족할 만한 수준의 성능을 제공하는지 검증할 수 있습니다. 성능 테스트를 수행하면…

Read More

최신 글

  • 윈도우 시작프로그램 정리 체크리스트: 부팅 속도 높이는 실무 요령
  • 카페 작업용 맥북 액세서리 추천 및 무게별 조합 요령
  • 로컬 개발 환경 초기화 요령: 맥과 윈도우에서 꼬인 의존성 깔끔하게 정리하기
  • img alt 속성 제대로 쓰는 방법: 웹 접근성과 검색 최적화를 위한 대체 텍스트 작성 요령
  • 구글 애드센스 심사 전 반드시 점검해야 할 필수 페이지 설정 방법

최신 댓글

보여줄 댓글이 없습니다.

보관함

  • 2026년 9월
  • 2026년 8월
  • 2026년 2월
  • 2025년 7월
  • 2025년 6월
  • 2025년 5월
  • 2025년 4월
  • 2025년 3월
  • 2025년 2월
  • 2025년 1월
  • 2024년 12월
  • 2024년 11월
  • 2024년 8월
  • 2024년 6월
  • 2024년 5월
  • 2024년 3월
  • 2024년 2월
  • 2023년 11월
  • 2023년 9월
  • 2023년 8월
  • 2023년 7월
  • 2023년 6월
  • 2023년 5월
  • 2023년 4월
  • 2023년 3월
  • 2023년 2월

카테고리

  • Flutter
  • HTML
  • IT 일반
  • Linux
  • 맥북
  • 워드프레스
  • 자바(Java)
  • 컴퓨터 활용
  • 파이썬
  • 프로그래밍

사이트 안내

  • 블로그 소개
  • 문의하기
  • 개인정보 처리방침
©2026 toylee blog | WordPress Theme by SuperbThemes