알고리즘공부(Algorithm Study)83 백준 19644번: 좀비 떼가 기관총 진지에도 오다니 문제풀이 문제 설명기관총 사거리 ( M_L ): 기관총이 좀비에게 도달할 수 있는 거리 기관총 살상력 ( M_K ): 기관총이 좀비에게 주는 데미지 수류탄 개수 ( C ): 남은 수류탄 개수 진지 앞쪽 거리 ( L ): 좀비가 등장하는 총 거리 좀비 체력 ( Z_i ): 각 거리에서 좀비의 체력 좀비는 기관총 사거리 내에서 최대 ( M_K ) 데미지를 받습니다. 만약 이를 초과하는 체력이 남으면 수류탄을 사용해야 합니다. 수류탄이 없으면 게임은 실패(NO), 끝까지 방어할 수 있으면 성공(YES) 입니다. 문제 풀이 과정1. 초기 입력 설정import sysinput = sys.stdin.readlineL = int(input()) # 진지 앞쪽 거리M_L, M_K = map(int, input()... 알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving) 2024. 12. 7. 백준 20186번: 수 고르기 문제 풀이 문제 설명백준 20186번 "수 고르기" 문제는 주어진 수열에서 특정 개수의 수를 선택하여 최대 합을 구하는 문제입니다. 단, 선택된 숫자의 합에서 특정 공식을 활용한 감산값이 존재하므로, 이에 따라 최적화된 선택이 중요합니다.목차문제 요약 및 제약 조건풀이 아이디어코드 설명코드 분석최적화 방안1. 문제 요약 및 제약 조건입력:첫 줄: (N) (수열의 길이)와 (K) (선택할 숫자의 개수).둘째 줄: (N)개의 정수.출력:(K)개의 숫자를 선택해 얻을 수 있는 최대 합.감산 공식: 선택한 (K)개의 수의 합에서 (K \times (K-1) / 2)를 빼야 합니다.2. 풀이 아이디어그리디 알고리즘 활용:수열을 내림차순으로 정렬.가장 큰 수부터 (K)개를 선택해 합산.감산 처리:(1, 2, 3, \ldots.. 알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving) 2024. 12. 6. 백준 1059번: 좋은 구간 문제 풀이 1. 문제 개요백준 1059번 좋은 구간 문제는 특정 정수 (n)을 포함하지 않는 좋은 구간을 찾아, 그 안에서 (n)보다 작은 숫자와 큰 숫자 사이의 조합을 구하는 문제입니다.주어진 숫자 리스트에서 (n)을 포함하지 않는 구간을 찾아 가능한 조합 수를 계산해야 하며, 수학적 사고와 간단한 구현을 요구합니다.2. 접근 방법입력 데이터 처리 및 정렬입력받은 리스트를 정렬하고, 정렬된 리스트의 인접한 수를 사용하여 (n)이 속한 구간을 찾습니다.구간 계산(l): (n)보다 작은 가장 큰 수 + 1(r): (n)보다 큰 가장 작은 수 - 1이 구간을 기준으로 (n)을 포함하지 않는 조합을 계산합니다.조합 공식(n)보다 작은 수에서 (n)보다 큰 수로 가는 조합: ((r - n + 1) \times (n - l.. 알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving) 2024. 12. 5. 백준 20044번: Project Teams 문제 풀이 1. 문제 개요백준 20044번, Project Teams 문제는 주어진 개발자들의 능력치를 이용해 팀을 구성하고, 각 팀의 능력치 합 중 최댓값을 최소화하는 것이 목표입니다. 이를 효율적으로 해결하기 위해 정렬과 양 끝의 포인터를 활용하는 접근법에 대해 알아보겠습니다.2. 접근 방법문제를 효율적으로 해결하기 위해 다음과 같은 로직을 설계했습니다.정렬하기능력치 리스트를 오름차순으로 정렬하여, 가장 작은 값과 큰 값을 쌍으로 묶으면 팀 능력치의 최대값을 최소화할 수 있습니다.양끝 더해서 최솟값 계산각 팀의 능력치를 구하기 위해 정렬된 리스트의 양 끝 값을 더합니다.최솟값 비교 반복가능한 모든 팀 조합의 능력치 중 최대값의 최솟값을 구합니다. 이를 위해 NN번 반복하며 최솟값을 업데이트합니다.3. 구현 코드.. 알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving) 2024. 12. 4. 백준 28353번: 고양이 카페 문제 풀이 1. 문제 개요백준 28353번, 고양이 카페 문제는 제한된 **최대 무게(K)**를 초과하지 않도록 고양이들의 무게를 조합하여 가능한 한 많은 쌍을 만들라는 문제입니다. 이를 효율적으로 해결하기 위해 정렬과 투포인터를 활용하는 방법에 대해 알아보겠습니다.2. 접근 방법문제를 효율적으로 풀기 위해 다음과 같은 방법을 사용했습니다.무게 정렬: 무게를 오름차순으로 정렬하여 작은 값과 큰 값을 비교하기 쉽게 만듭니다.투포인터 활용:양 끝의 포인터 l과 r을 설정합니다.두 포인터의 합이 최대 무게 K 이하이면 쌍을 만들 수 있으므로 둘 다 포인터를 좁힙니다.합이 K보다 크면, 오른쪽 포인터(r)를 줄여서 더 작은 값을 탐색합니다.종료 조건:두 포인터가 교차하면 반복을 종료합니다.3. 구현 코드# 입력 받기N, .. 알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving) 2024. 12. 4. 비트연산과 2의 보수: 기본 개념부터 실습까지 완벽 가이드 1. 비트연산이란?비트연산은 컴퓨터에서 데이터를 처리할 때 사용하는 기본적인 연산 방식입니다. 데이터가 이진수(0과 1)로 표현되기 때문에, 이러한 비트를 조작하는 것이 중요합니다. 비트연산은 보통 프로세서의 수준에서 매우 빠르게 처리되며, 효율적인 프로그램 작성에 필수적인 요소입니다.2. 비트연산의 주요 종류비트연산에는 여러 가지 종류가 있으며, 각 연산은 특정 비트 패턴을 조작하는 데 사용됩니다.AND 연산: 두 비트가 모두 1일 때만 1을 반환합니다.OR 연산: 두 비트 중 하나라도 1이면 1을 반환합니다.NOT 연산: 비트를 반전시킵니다. 0은 1로, 1은 0으로 바뀝니다.XOR 연산: 두 비트가 다를 때 1을 반환합니다.이러한 비트연산은 주로 마스크(mask)를 사용하여 특정 비트를 선택하거나 .. 알고리즘공부(Algorithm Study) 2024. 8. 16. Karatsuba 알고리즘 Karatsuba 알고리즘이란?Karatsuba 알고리즘은 큰 수의 곱셈을 더 효율적으로 수행하기 위한 알고리즘입니다. 이 알고리즘은 1960년에 안넨카롤로스 Karatsuba에 의해 처음 개발되었으며, 전통적인 곱셈 방법보다 계산 복잡도가 낮습니다.1. 전통적인 곱셈의 문제점일반적으로 두 자리수가 각각 n자리수일 때, 이들을 곱하기 위해서는 O(n^2)의 시간이 소요됩니다. 예를 들어, 두 개의 4자리수를 곱할 때는 각 자리수마다 곱셈과 덧셈을 반복하는 방식으로 총 16번의 곱셈을 수행하게 됩니다. 이 방식은 숫자가 커질수록 연산량이 급격히 증가하여 비효율적입니다.2. Karatsuba 알고리즘의 기본 개념Karatsuba 알고리즘은 '분할 정복(Divide and Conquer)' 접근 방식을 사용하.. 알고리즘공부(Algorithm Study)/알고리즘이론(AlgorithmTheory) 2024. 8. 13. 무한히 큰 수 두 개의 사칙연산 처리 방법과 파이썬 예제 무한히 큰 수를 다루는 것은 암호화, 금융 계산, 과학적 시뮬레이션 등 여러 분야에서 중요한 역할을 합니다. 하지만 단순히 큰 수의 사칙연산을 처리하는 것뿐만 아니라, 이러한 연산을 효율적으로 수행하는 알고리즘과 방법이 필요합니다. 이 글에서는 무한히 큰 수를 다루는 방법과 효율적인 사칙연산 알고리즘을 소개하고, 파이썬 예제 코드도 함께 살펴보겠습니다.1. 무한히 큰 수의 개념무한히 큰 수는 컴퓨터의 기본 데이터 타입으로 표현할 수 없는 크기의 숫자를 의미합니다. 컴퓨터에서는 메모리와 시간 복잡도 제한 때문에 무한히 큰 수를 다루기 위해서는 특별한 방법이 필요합니다. 특히, 단순한 연산 이상의 복잡한 알고리즘이 필요할 때가 많습니다.2. 무한히 큰 수의 사칙연산 처리무한히 큰 수의 사칙연산은 기본적인 덧.. 알고리즘공부(Algorithm Study)/알고리즘이론(AlgorithmTheory) 2024. 8. 13. [순열 사이클 분할] 백준 10451 순열 사이클 이번 포스트에서는 백준 10451번 문제인 "순열 사이클"을 파이썬으로 풀이한 방법을 공유하고자 합니다. 이 문제는 주어진 순열 내에서 사이클이 몇 개 존재하는지를 찾는 문제로, DFS(깊이 우선 탐색)를 활용하여 해결할 수 있습니다.순열 사이클 분할 설명순열 사이클 분할은 주어진 순열을 사이클 구조로 분해하는 과정입니다. 순열은 각 요소가 다른 요소로 매핑되는 일종의 함수입니다. 이때, 순환 구조(사이클)를 찾는다는 것은 해당 순열 내에서 자기 자신으로 돌아오는 경로를 찾는 것을 의미합니다.예를 들어, 순열이 다음과 같이 주어졌다고 가정합니다:( \text{순열} = [2, 3, 1, 5, 6, 4] )이 순열에서 사이클을 찾아보면:1 → 2 → 3 → 1 (사이클 형성)4 → 5 → 6 → 4 (사이.. 알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving) 2024. 8. 10. [다익스트라] 백준 1753 최단경로 이번 포스팅에서는 백준 1753번 문제를 다익스트라 알고리즘을 활용하여 풀이하는 방법을 다뤄보겠습니다. 이 문제는 특정 시작점에서 다른 모든 정점으로 가는 최단 경로를 찾는 문제로, 그래프 이론에서 자주 등장하는 문제 유형입니다.문제 설명주어진 그래프에서 시작점으로부터 다른 모든 정점으로의 최단 경로를 구하는 문제입니다. 그래프는 방향성이 있으며, 간선마다 가중치가 부여되어 있습니다. 다익스트라 알고리즘은 이와 같은 가중 그래프에서의 최단 경로 문제를 효율적으로 해결할 수 있는 알고리즘입니다.다익스트라 알고리즘 개요다익스트라 알고리즘은 그래프 이론에서 가장 널리 사용되는 최단 경로 탐색 알고리즘 중 하나입니다. 이 알고리즘은 가중치가 있는 그래프에서, 하나의 시작 정점으로부터 다른 모든 정점으로 가는 최.. 알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving) 2024. 8. 10. [등차수열] 백준 2108 수들의 합 이번 포스팅에서는 백준 2108번 문제를 효율적으로 풀이하는 방법을 다뤄보겠습니다. 이 문제는 특정 수 ( N )을 등차수열로 나타낼 수 있는 모든 경우의 수를 구하는 문제입니다. 특히 이 문제는 자기 자신을 포함한 수열을 고려하는 것을 요구합니다.문제 분석주어진 숫자 ( N )을 자기 자신도 포함하여 하나 이상의 자연수로 이루어진 등차수열로 나타낼 수 있는 모든 경우의 수를 찾는 것이 목표입니다. 수열의 길이가 1 이상인 등차수열을 찾는 과정에서 우리는 ( N )의 약수와 관련된 규칙을 활용할 수 있습니다.핵심 개념등차수열이란?: 등차수열은 연속된 수들의 합입니다. 예를 들어, 1, 2, 3, 4, 5는 모두 연속된 수들이므로, 그 합은 15입니다. 이 문제에서는 어떤 수 ( N )을 연속된 자연수들의.. 알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving) 2024. 8. 10. sys.stdin.readline() vs input() in Python 파이썬에서 입력을 받을 때, 많은 사람들이 input() 함수를 사용합니다. 하지만 알고리즘 문제나 대량의 입력을 다룰 때는 sys.stdin.readline()이 더 효율적인 경우가 많습니다. 이 두 가지 방법의 차이점을 알아보겠습니다.sys.stdin.readline() vs input()1. 속도 차이sys.stdin.readline()은 더 빠른 속도를 제공합니다. 이 함수는 버퍼를 사용하여 입력을 처리하기 때문에, 반복적으로 많은 양의 데이터를 입력받아야 하는 상황에서 훨씬 더 효율적입니다. 반면, input()은 내부적으로 sys.stdin.readline()을 사용하지만, 추가적으로 개행 문자를 제거하는 작업이 포함되어 있어 상대적으로 시간이 더 소요됩니다.2. 입력 처리 방식sys.stdi.. 알고리즘공부(Algorithm Study)/기본개념(Concept) 2024. 8. 9. 이전 1 2 3 4 ··· 7 다음 728x90