Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python

  1. 파이썬 딕셔너리 has_key() 메서드 완벽 정리 - 키 존재 여부 확인 방법

    파이썬에서 딕셔너리(dictionary)를 다루다 보면 특정 키(key)가 딕셔너리 안에 존재하는지 확인해야 하는 상황이 자주 발생합니다. 딕셔너리는 순서가 없는 요소들의 집합이기 때문에 리스트처럼 인덱스(위치)를 기반으로 값을 찾을 수 없습니다. 이를 위해 파이썬 표준 라이브러리는 has_key() 메서드를 제공하여 딕셔너리 내 키의 존재 여부를 손쉽게 확인할 수 있도록 지원합니다.다만 주의할 점은, 이 메서드는 파이썬 2.x에서만 사용 가능하며 파이썬 3.x에서는 완전히 제거되었다는 것입니다. 파이썬 3 환경이라면 아래에서 소개

  2. 파이썬으로 행과 열로 구성된 행렬의 모든 요소를 정렬된 순서로 출력하는 방법

    행렬(matrix)을 다루다 보면 행과 열에 흩어져 있는 모든 요소를 하나의 정렬된 순서로 확인해야 하는 경우가 있습니다. 하지만 행렬은 행과 열의 구조로 되어 있기 때문에 일반적인 정렬 알고리즘을 그대로 적용하기는 어렵습니다. 이럴 때는 아래와 같이 직접 정의한 함수를 활용하면 행렬의 요소들을 간단하게 정렬할 수 있습니다.힙 정렬(Heap Sort) 기반 정렬 함수다음 예제는 힙 정렬의 원리를 이용해 주어진 값들을 오름차순으로 정렬하는 사용자 정의 함수입니다. heapq 함수는 최대 힙(max heap)을 유지하는 역할을 하고,

  3. 파이썬으로 푸는 0-1 배낭 문제: 브루트 포스부터 동적 계획법까지

    이 글에서는 고전적인 조합 최적화 문제인 0-1 배낭 문제(0-1 Knapsack Problem)를 파이썬으로 해결하는 방법을 단계별로 살펴보겠습니다. 문제 정의 n개의 물건이 주어지고, 각 물건마다 무게(weight)와 가치(value)가 정해져 있습니다. 최대 용량이 W인 가방에 이 물건들을 담아야 하며, 목표는 가방에 담을 수 있는 물건들의 총 가치를 최대화하는 것입니다. 단, 각 물건은 한 번만 담을 수 있으며(0-1 제약), 가방의 용량을 초과할 수 없습니다. 그럼 두 가지 접근법을 통해 해결 과정을 살펴보겠습니다.

  4. 파이썬으로 푸는 활동 선택 문제: 그리디 알고리즘 완벽 가이드

    이 글에서는 활동 선택 문제(Activity Selection Problem)를 파이썬으로 해결하는 방법을 예제 코드와 함께 단계별로 살펴보겠습니다. 문제 정의 각 활동마다 시작 시간과 종료 시간이 주어진 n개의 활동이 있습니다. 한 사람은 동시에 두 개 이상의 활동을 수행할 수 없다는 조건 하에서, 이 사람이 수행할 수 있는 최대 개수의 활동을 선택하는 것이 목표입니다. 사용되는 변수 N — 전체 활동의 개수 S — 모든 활동의 시작 시간을 저장한 배열 F — 모든 활동의 종료 시간을 저장한 배열 해결 접근 방식: 그리디(Gr

  5. 파이썬(Python)으로 구현하는 아나그램 부분 문자열 검색 프로그램

    이번 글에서는 아래 문제 상황을 파이썬 코드로 해결하는 방법을 알아보겠습니다. 문제 정의 문제 — 텍스트(text)와 패턴(pattern)이 주어졌을 때, 텍스트 안에서 패턴 자체뿐만 아니라 패턴의 모든 순열(아나그램)이 등장하는 위치를 전부 출력해야 합니다. 예를 들어 패턴이 TOR라면 ROT, OTR, ORT처럼 같은 문자들을 재배열한 문자열 역시 모두 검색 대상에 포함됩니다. 풀이 접근: 슬라이딩 윈도우 + 문자 빈도 배열 모든 부분 문자열을 일일이 정렬해 비교하는 브루트포스 방식은 비효율적입니다. 대신 길이가 M인

  6. 파이썬으로 구현하는 애너그램 부분 문자열 검색 프로그램

    개요 이 글에서는 파이썬을 활용해 애너그램 부분 문자열 검색(Anagram Substring Search) 문제를 해결하는 방법을 알아봅니다. 문제 정의 주어진 텍스트(text)와 패턴(pattern)이 있을 때, 텍스트 안에서 패턴 자체뿐만 아니라 패턴의 모든 순열(애너그램)이 나타나는 위치를 모두 찾아 출력하는 것이 목표입니다. 예를 들어 텍스트가 TUTORIALSPOINT이고 패턴이 TOR라면, ROT, OTR처럼 같은 문자들로 재배열된 형태도 모두 검색 대상이 됩니다. 해결 접근 방식 이 문제는 슬라이딩 윈도우(Sliding

  7. 파이썬으로 구현하는 기본 유클리드 호제법: 최대공약수(GCD) 계산 프로그램

    이 글에서는 두 수의 최대공약수(GCD)를 구하는 문제를 파이썬으로 해결하는 방법을 알아보겠습니다.문제 정의주어진 두 개의 숫자에 대해 최대공약수(GCD)를 계산하고 그 결과를 출력하는 것이 목표입니다.두 수의 최대공약수(Greatest Common Divisor, GCD)란 두 수를 모두 나눌 수 있는 가장 큰 수를 의미합니다. 예를 들어, 12와 18의 최대공약수는 6입니다.유클리드 호제법이란?유클리드 호제법(Euclidean Algorithm)은 고대 그리스 수학자 유클리드가 제시한 방법으로, 두 수의 최대공약수를 효율적으로

  8. 파이썬으로 구현하는 이진 삽입 정렬(Binary Insertion Sort) 완벽 가이드

    이 글에서는 이진 삽입 정렬(Binary Insertion Sort)을 파이썬으로 구현하는 방법을 단계별로 알아보겠습니다.문제 정의문제 – 주어진 배열을 이진 삽입 정렬 개념을 활용해 오름차순으로 정렬해야 합니다.이름에서 알 수 있듯이, 이진 삽입 정렬은 삽입 정렬(Insertion Sort) 알고리즘에 이진 탐색(Binary Search) 개념을 결합한 정렬 방식입니다. 일반적인 삽입 정렬은 새 요소가 들어갈 위치를 찾기 위해 정렬된 앞부분을 처음부터 한 칸씩 비교하지만, 이진 삽입 정렬은 이진 탐색으로 삽입 위치를 빠르게 찾아내

  9. 파이썬으로 구현하는 보고소트(BogoSort): 순열 정렬 알고리즘 완벽 가이드

    보고소트(BogoSort)란?이 글에서는 보고소트(BogoSort), 일명 순열 정렬(Permutation Sort) 알고리즘을 파이썬으로 구현하는 방법을 살펴봅니다.보고소트는 생성 후 검증(Generate and Test) 패러다임에 기반한 정렬 알고리즘입니다. 배열의 요소를 무작위로 섞은 뒤 정렬 여부를 확인하고, 정렬된 상태가 나올 때까지 이 과정을 계속 반복하는 매우 단순한 방식입니다.문제 정의문제: 하나의 배열이 주어졌을 때, 순열 정렬의 개념을 활용하여 해당 배열을 오름차순으로 정렬해야 합니다.이 알고리즘은 다음 두 가지

  10. 파이썬으로 구현하는 칵테일 정렬(Cocktail Sort) 프로그램

    이 글에서는 칵테일 정렬(Cocktail Sort) 알고리즘을 파이썬으로 구현하는 방법을 단계별로 살펴보겠습니다.문제 정의문제 — 주어진 리스트에 대해 칵테일 정렬을 수행하고, 정렬된 결과를 출력해야 합니다.칵테일 정렬이란? — 칵테일 정렬은 버블 정렬(Bubble Sort)의 변형된 형태로, 한 번의 순회에서 양방향(왼쪽→오른쪽, 오른쪽→왼쪽)으로 번갈아 가며 탐색한다는 점이 특징입니다. 이를 통해 버블 정렬의 거북이 문제(작은 값이 배열 앞쪽으로 느리게 이동하는 현상)를 완화할 수 있습니다.알고리즘 동작 원리칵테일 정렬은 다음과

  11. 파이썬으로 푸는 동전 교환(Coin Change) 문제 – 동적 계획법 완벽 가이드

    이 글에서는 동전 교환(Coin Change) 문제를 파이썬으로 해결하는 방법을 단계별로 살펴봅니다. 문제 정의 여러 액면가를 가진 동전 집합 S가 주어졌을 때, 각 액면가의 동전은 무한개만큼 사용할 수 있다고 가정합니다. 이때 목표 금액 n을 만들 수 있는 조합의 개수(순서는 고려하지 않음)를 구하는 것이 문제입니다. 예를 들어 동전이 [1, 2, 3]이고 목표 금액이 4라면, {1,1,1,1}, {1,1,2}, {2,2}, {1,3}처럼 총 4가지 방법이 존재합니다. 접근 방법: 동적 계획법(Dynamic Programming)

  12. 파이썬으로 구현하는 카운팅 정렬(Counting Sort) 프로그램

    이 글에서는 카운팅 정렬(Counting Sort) 알고리즘을 파이썬으로 구현하는 방법을 단계별로 살펴보겠습니다. 문제 정의 문제: 주어진 배열을 카운팅 정렬 개념을 활용하여 오름차순으로 정렬해야 합니다. 카운팅 정렬은 특정 범위 내의 키(key)를 대상으로 동작하는 정렬 기법입니다. 서로 다른 키와 값을 가지는 객체의 개수를 먼저 세고(count), 이후 간단한 산술 계산을 통해 각 객체가 출력 배열에서 차지할 위치를 결정하여 최종 결과를 출력합니다. 이 알고리즘은 비교 연산 없이 정렬을 수행하기 때문에, 데이터 값의 범위가 제한

  13. 파이썬으로 푸는 막대 자르기(Rod Cutting) 문제 – 동적 프로그래밍 완전 정복

    이 글에서는 막대 자르기(Rod Cutting) 문제를 파이썬으로 해결하는 방법을 단계별로 살펴보겠습니다.문제 정의문제: 길이가 n인 하나의 막대와, n보다 작은 각 크기 조각들의 판매 가격이 담긴 배열이 주어집니다. 이때 막대를 여러 조각으로 잘라 판매함으로써 얻을 수 있는 최대 수익을 구하는 것이 목표입니다.접근 방법: 동적 프로그래밍막대 자르기 문제는 부분 문제들이 서로 겹치는 특징이 있어 동적 프로그래밍(Dynamic Programming)으로 효율적으로 해결할 수 있습니다. 길이 i인 막대의 최대 수익은 다음과 같이 정의됩

  14. 파이썬(Python)으로 구현하는 사이클 정렬(Cycle Sort) 알고리즘

    이 글에서는 다음 문제 상황에 대한 해결 방법을 단계별로 살펴보겠습니다. 문제 정의 문제 — 하나의 배열이 주어졌을 때, 사이클 정렬(Cycle Sort) 개념을 활용하여 해당 배열을 정렬해야 합니다. 사이클 정렬은 제자리(in-place) 정렬 알고리즘입니다. 추가적인 메모리 없이 배열 내부에서 직접 정렬이 진행되며, 여러 개의 사이클(cycle)을 형성하면서 요소들이 교환(swap)되는 방식으로 동작합니다. 특히 사이클 정렬은 배열에 대한 쓰기(write) 연산 횟수를 이론상 최소화할 수 있어, 쓰기 비용이 큰 저장 장치(플래시

  15. Python으로 방향 그래프(Directed Graph)의 사이클 감지하기

    이 글에서는 아래 문제를 해결하는 방법을 단계별로 살펴보겠습니다.문제 정의주어진 방향 그래프(Directed Graph)에 사이클(cycle)이 존재하는지 판별해야 합니다. 그래프에 하나라도 사이클이 있다면 True를, 없다면 False를 출력합니다.접근 방법: DFS와 재귀 스택 활용방향 그래프에서 사이클을 감지하는 가장 대표적인 방법은 깊이 우선 탐색(DFS)입니다. 핵심 아이디어는 다음과 같습니다.visited 배열로 각 노드의 방문 여부를 추적합니다.recStack(재귀 스택) 배열로 현재 탐색 경로에 포함된 노드를 추적합니

  16. 파이썬으로 풀어보는 계란 던지기 퍼즐: 최소 시도 횟수 구하기

    이 글에서는 아래 문제에 대한 해결 방법을 단계별로 살펴보겠습니다. 문제 정의 40층 높이의 건물이 있다고 가정해 봅시다. 우리는 어떤 층에서 계란을 떨어뜨려도 깨지지 않는지(안전한 층), 그리고 어느 층부터 계란이 깨지기 시작하는지 확인하고 싶습니다. 이때 필요한 최소 시도 횟수(trials)를 구하는 것이 이 퍼즐의 목표입니다. 이 문제는 동적 프로그래밍(Dynamic Programming)을 활용하면 효율적으로 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다. 계란을 x번째 층에서 떨어뜨리면 두 가지 결과 중 하나가 발

  17. 파이썬으로 구현하는 확장 유클리드 호제법(Extended Euclidean Algorithm)

    이 글에서는 두 수의 최대공약수(GCD)를 구하는 문제를 확장 유클리드 호제법(Extended Euclidean Algorithm)으로 해결하는 파이썬 프로그램을 살펴봅니다. 문제 정의 두 개의 수가 주어졌을 때, 이 두 수의 최대공약수(GCD)를 계산하여 화면에 출력하는 것이 목표입니다. 최대공약수와 유클리드 호제법의 원리 두 수의 최대공약수(GCD, Greatest Common Divisor)란 두 수를 모두 나누어 떨어지게 하는 가장 큰 정수를 의미합니다. 기본적인 유클리드 호제법은 다음 원리를 이용합니다. gcd(a,

  18. Python으로 두 개의 정렬된 배열에서 가장 가까운 쌍 찾기

    이 글에서는 아래의 문제 설명에 대한 해결 방법을 단계별로 알아보겠습니다. 문제 설명 — 두 개의 정렬된 배열이 주어졌을 때, 두 배열에서 하나씩 선택한 요소의 합이 목표값 x에 가장 가까운 쌍(closest pair)을 찾아야 합니다. 이 문제는 투 포인터(Two Pointer) 기법을 활용하면 효율적으로 해결할 수 있습니다. 첫 번째 배열은 왼쪽 끝에서 시작하고, 두 번째 배열은 오른쪽 끝에서 시작하여 두 요소의 합과 목표값의 차이를 비교하면서 포인터를 이동시키는 방식입니다. 이 방법의 시간 복잡도는 O(m+n)으로, 모든 조합

  19. 파이썬으로 배우는 그놈 정렬(Gnome Sort) 알고리즘 구현하기

    이 글에서는 그놈 정렬(Gnome Sort)이라는 간단한 정렬 알고리즘을 파이썬으로 구현하는 방법을 단계별로 살펴보겠습니다. 문제 정의 문제 — 주어진 배열을 그놈 정렬 알고리즘을 이용해 오름차순으로 정렬해야 합니다. 알고리즘 원리 그놈 정렬은 이름처럼 정원 난쟁이(gnome)가 화분을 정리하듯 배열을 순회하며 정렬하는 직관적인 방식입니다. 동작 과정은 다음과 같습니다. 1. 배열을 왼쪽에서 오른쪽으로 순회합니다. 2. 현재 요소가 이전 요소보다 크거나 같으면 한 칸 앞으로 이동합니다. 3. 현재 요소가 이전 요소보다 작으면 두 요

  20. 파이썬(Python)으로 구현하는 힙 정렬(Heap Sort) 완벽 가이드

    이 글에서는 배열을 힙 정렬(Heap Sort) 알고리즘으로 정렬하는 파이썬 프로그램을 다룹니다. 힙 정렬의 기본 개념부터 실제 구현 코드와 실행 결과까지 단계별로 살펴보겠습니다.문제 정의문제: 주어진 배열을 힙 정렬(Heap Sort)의 개념을 이용해 오름차순으로 정렬합니다.힙 정렬의 핵심 아이디어는 다음과 같습니다. 먼저 배열을 최대 힙(Max Heap) 구조로 만든 뒤, 루트에 위치한 최댓값을 배열의 마지막 요소와 교환(swap)합니다. 이 과정을 정렬이 완료될 때까지 반복하면, 최댓값부터 차례대로 배열 뒤쪽에 배치되어 최종적

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:111/450  20-컴퓨터/Page Goto:1 105 106 107 108 109 110 111 112 113 114 115 116 117