코딩라이브러리/파이썬 34

[파이썬] 백준 6603 로또 (조합 combinations)

✅ 백준 문제 링크: 백준 6603번 - 로또1. 문제 설명 독일의 로또는 6개의 숫자를 선택하는 방식이다.주어진 K개의 숫자 중에서 6개를 고르는 모든 조합을 출력하는 문제이다.입력의 마지막 줄에는 0이 주어지며, 이를 입력의 종료 조건으로 사용한다.각 테스트 케이스는 사전순(오름차순)으로 출력해야 한다.2. 조합(Combination)이란? 조합이란, 주어진 n개의 원소 중에서 r개를 선택하는 경우의 수를 의미한다.순서가 중요하지 않으며, 파이썬에서는 itertools.combinations() 함수를 사용하면 쉽게 구현할 수 있다. 📌 조합 예제from itertools import combinationsnumbers = [1, 2, 3, 4]combi = list(combinations(numb..

[파이썬] 백준 2309 일곱 난쟁이 (조합 combination)

✅ 백준 문제 링크: 백준 2309번 - 일곱 난쟁이1. 조합(Combination) 이란? 조합이란, 서로 다른 n개의 원소 중에서 r개를 중복 없이 선택하는 방법을 의미한다.순서는 고려하지 않으며, 파이썬에서는 itertools.combinations() 함수를 사용하여 쉽게 구현할 수 있다. 📌 조합 예제from itertools import combinationspeople = ['A', 'B', 'C']combi = list(combinations(people, 2)) # 3명 중에서 2명을 선택하는 경우의 수print(combi) 🔹 출력:[('A', 'B'), ('A', 'C'), ('B', 'C')] 2. 문제 설명 아홉 난쟁이 중에서 일곱 명을 골라 키의 합이 100이 되는 경우를 ..

[파이썬] 백준 13706 이분탐색이란

✅ 백준 문제 링크: 백준 13706번 - 제곱근1. 이분 탐색(Binary Search) 기본 원리 이분 탐색은 정렬된 배열에서 특정 값을 빠르게 찾는 알고리즘이다.다음과 같은 방식으로 동작한다. 1️⃣ 배열의 중간값을 찾는다.2️⃣ 찾고자 하는 값과 중간값을 비교한다.중간값이 찾는 값보다 크면 왼쪽 부분을 탐색한다.중간값이 찾는 값보다 작으면 오른쪽 부분을 탐색한다.3️⃣ 이 과정을 반복하여 값을 찾을 때까지 탐색한다. ✅ 이분 탐색의 전제 조건: • 탐색할 배열이 반드시 정렬된 상태여야 한다! 2. 이분 탐색 기본 알고리즘 (반복문 & 재귀 호출) 📌 반복문(Binary Search - Iterative)#이분탐색 반복문def binary_search(target, data): data.so..

[파이썬] 백준 1929 소수 구하기, 소수 판별법

✅ 백준 문제 링크: 백준 1929번 - 소수 구하기1. 소수란? 소수(Prime Number)란 1과 자기 자신으로만 나누어 떨어지는 수를 의미합니다.즉, 약수가 1과 자기 자신뿐인 수를 소수라고 합니다. ✅ 소수 예시 (1~10까지)1, 2, 3, 4, 5, 6, 7, 8, 9, 10 → 소수: 2, 3, 5, 7 2. 소수 판별법 어떤 수 N이 소수인지 판별하는 기본적인 방법은1부터 N까지의 모든 수로 나누어보는 것이다. 그러나 이 방법은 시간 복잡도가 O(N) 이므로,입력값이 커질 경우 비효율적이다. ✅ 최적화된 소수 판별법 (제곱근 이용) 어떤 수 N이 소수인지 판별할 때,“N의 제곱근 이하의 수까지만 나누어 보면 충분” 하다.즉, sqrt(N) 이하의 수까지만 나눠보고 나누어 떨어지지 않으면 ..

[파이썬] 백준 2609 최대공약수, 최소공배수

✅ 백준 문제 링크: 백준 2609번 - 최대공약수와 최소공배수1. 최대공약수(GCD)와 최소공배수(LCM)란? ✅ 최대공약수(GCD, Greatest Common Divisor) 0이 아닌 두 정수 n과 m이 공통으로 가지고 있는 약수 중 가장 큰 수를 의미한다. 약수란?어떤 수를 나누어 떨어지게 하는 수를 뜻한다.예를 들어 6의 약수는 1, 2, 3, 6 이다.즉, 어떤 수를 두 개의 정수로 나눌 수 있으면, 그 정수들은 해당 수의 약수이다. ✔ 예제: 12와 20의 최대공약수12의 약수: 1, 2, 3, 4, 6, 12 20의 약수: 1, 2, 4, 5, 10, 20 공통 약수: 1, 2, 4 최대공약수(GCD) = 4 ✅ 최소공배수(LCM, Least Common Multiple) 두 정수 ..

백준 1003 피보나치 함수, 다이나믹 프로그래밍 DP (with 파이썬)

✅ 문제 링크: 백준 1003번 - 피보나치 함수 1. 피보나치 수열이란? ✅ 개념 피보나치 수열은 연속한 두 수의 합이 다음 수가 되는 수열이다.다음과 같이 정의된다. F(n) = F(n-1) + F(n-2) 단, 초기값은F(0) = 0, \quad F(1) = 1 🔹 예제0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 2. 다이나믹 프로그래밍(DP)란? ✅ 개념 “이미 계산한 값을 저장하여 중복 계산을 방지하는 기법” • 재사용 가능한 값을 저장하여 빠르게 연산 • 재귀 호출을 최소화하여 성능 개선 • 시간 복잡도를 획기적으로 줄일 수 있음 ✔ 비효율적인 재귀 호출을 방지하여 연산 속도를 크게 향상시킨다. 3. 문제 접근 방식 ❌ 잘못된 접근 (재귀 방식, 시간 초과..

파이썬 윤년 계산하기 (with 백준 2753)

파이썬에서는 **윤년(Leap Year)**을 쉽게 계산할 수 있다.윤년 계산에는 calendar 모듈의 isleap() 함수를 사용할 수도 있고, 조건문을 활용하여 직접 구현할 수도 있다. 📌 calendar.isleap() 함수로 윤년 계산하기 파이썬의 calendar 모듈에는 윤년 여부를 확인하는 isleap(year) 함수가 있다.이 함수는 **윤년이면 True, 윤년이 아니면 False**를 반환한다. ✅ 코드 예제import calendar as cdy = int(input("연도를 입력하세요: ")) # 연도 입력if cd.isleap(y): # 윤년이면 True 반환 print(f"입력한 연도는 윤년입니다.: {cd.isleap(y)}")else: # 윤년이 아니면 False ..

[파이썬] 시간 함수 어떻게 쓰나 (with 백준 10699)

파이썬에서 시간 및 날짜 관련 함수는 time 모듈과 datetime 모듈을 활용하여 쉽게 다룰 수 있다.time 모듈 → 프로그램 실행 시간을 측정할 때 사용datetime 모듈 → 날짜 계산 및 포맷 변환할 때 사용이번 포스트에서는 시간 함수 활용법과 백준 10699번 문제 풀이를 해보겠다. 📌 time 모듈 – 실행 시간 측정하기 프로그램의 실행 시간을 측정하고 싶다면 time.time() 함수를 사용할 수 있다. ✅ 실행 시간 측정 코드import timest = time.time() # 시작 시간 기록# 프로그램 실행 (예: 1초 대기)time.sleep(1)end = time.time() # 종료 시간 기록diff = end - st # 실행 시간 계산print(f"프로그램 작동시간: ..

백준 2164 큐, deque 연습

[문제 링크] 🔗 백준 2164 - 카드2 백준 2164 문제는 큐(Queue) 자료구조를 활용하여 풀 수 있는 문제이며,카드를 특정 규칙에 따라 제거하면서 마지막에 남는 카드를 찾는 문제이다. 📌 문제 이해1 ~ N까지의 카드가 순서대로 놓여 있다.맨 위의 카드를 버린다.그다음 맨 위의 카드를 제일 아래로 옮긴다.위 과정을 반복하여 마지막에 남는 카드를 찾는다.✅ 큐(Queue)의 FIFO(선입선출) 구조를 활용해야 한다.✅ deque를 사용하면 더 효율적으로 해결할 수 있다. 📌 풀이 방법 이 문제를 해결하는 방법은 두 가지가 있다.deque.rotate() 메서드를 사용하는 방법popleft()와 append()를 조합하여 직접 구현하는 방법🔹 1. rotate() 메서드를 이용한 풀이 ✅ ..

파이썬 스택, 큐 deque (with 백준 18258)

✅ 스택(Stack)과 큐(Queue)는 기본적인 자료구조로 다양한 알고리즘에서 활용된다.✅ 파이썬에서는 list와 deque를 활용하여 스택과 큐를 구현할 수 있다.✅ 백준 18258번 문제(큐2)를 통해 deque를 연습해 본다! 📌 스택과 큐의 차이점자료구조동작 방식특징스택 (Stack)LIFO (Last In First Out)나중에 들어간 요소가 먼저 나옴큐 (Queue)FIFO (First In First Out)먼저 들어간 요소가 먼저 나옴 📌 스택 (Stack) - 리스트 활용 파이썬에서는 list 객체를 이용하여 스택을 구현할 수 있다.stack = []# 요소 추가 (push)stack.append(1)stack.append(2)stack.append(3)print(stack) #..