Python 42

[파이썬] 백준 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이 되는 경우를 ..

[파이썬] 백준 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) #..

파이썬 중복제거 set 집합함수 (with 백준 2776)

✅ 중복을 제거하고 싶다면 set()을 활용한다✅ set()은 리스트를 집합으로 변환하며, 자동으로 중복된 요소를 제거한다.✅ 집합 연산(교집합, 합집합, 차집합)도 쉽게 처리할 수 있다. 📌 set() 함수란? set() 함수는 집합 자료형을 생성하는 함수이다.집합은 중복을 허용하지 않으며, 순서가 없는 자료형이다. 📌 set(iterable) → iterable(반복 가능한 객체)을 집합으로 변환a = [2, 1, 3, 4, 5, 5, 6, 7, 3]unique_a = set(a)print(unique_a) # {1, 2, 3, 4, 5, 6, 7}print(len(unique_a)) # 7 (중복 제거됨) 📌 리스트에서 중복 제거하기 📌 리스트를 set()으로 변환 → 다시 리스트로 변환..

파이썬 Counter (with 백준 10815, 10816)

✅ Counter는 리스트, 문자열 등의 요소 개수를 쉽게 세는 도구이다.✅ 중복된 요소의 개수를 빠르게 확인할 수 있다.✅ 백준 10815, 10816 문제에서 Counter를 활용해 효율적인 풀이가 가능하다. 📌 Counter 객체란? Counter는 collections 모듈에서 제공하는 계수기 도구이다.리스트, 문자열 등의 요소 개수를 빠르게 세는 기능을 제공한다. 📌 사용법:from collections import Counterwords = ['yun', 'Lee', 'yun', 'bang', 'Lee', 'Lee']cnt = Counter(words)print(cnt) # Counter({'Lee': 3, 'yun': 2, 'bang': 1}) 📌 Counter 예제 ✅ 리스트에서 개..