본문 바로가기

전체 글274

영어 대본 생성기와 생성 결과 https://enrole.streamlit.app/ streamlit appA simple Streamlit app that draws a spiral.enrole.streamlit.app[Characters]1. Sumi: An active and curious student.2. Jin: A calm and inquisitive student.3. Minho: A student interested in science.4. Hana: A responsible student who takes care of her friends.5. Jisoo: A brave and adventurous student.6. Taeyang: A cautious and thoughtful student.7. Yuna: A .. 2024. 7. 10.
비트 연산과 알고리즘 조합 비트 연산은 컴퓨터의 기본 연산 단위이기 때문에 매우 빠르다. 이는 비트 연산을 다양한 알고리즘에 결합함으로써 효율성을 증가시키는 주요 이유이다. 이제 비트 연산이 각각의 알고리즘에서 어떻게, 왜 효율성을 증가시키는지 비교하여 설명하겠다.1. 동적 프로그래밍 (Dynamic Programming)과 비트 마스크비트 마스크의 사용:일반적 접근: 동적 프로그래밍에서는 주로 배열이나 리스트를 사용하여 상태를 저장한다.비트 연산 접근: 비트 마스크를 사용하면 상태를 정수의 비트로 표현할 수 있어 메모리 사용을 줄이고, 상태 확인이나 전환을 빠르게 할 수 있다.효율성 증가 이유:상태 전환이 O(1) 시간에 가능하다.메모리 효율성이 높아진다. 예를 들어, n개의 상태를 표현할 때 배열을 사용하면 n개의 공간이 필요.. 2024. 7. 7.
라그랑주 중간값 정리(Lagrange Mean Value Theorem) 라그랑주 중간값 정리:연속 함수 fff가 구간 [a,b][a, b][a,b]에서 연속이고 열린 구간 (a,b)(a, b)(a,b)에서 미분 가능하다고 하자. 그러면 적어도 하나의 점 c∈(a,b)c \in (a, b)c∈(a,b)가 존재하여 다음 식을 만족합니다:f′(c)=f(b)−f(a)b−a f'(c) = \frac{f(b) - f(a)}{b - a} f′(c)=b−af(b)−f(a)​이 정리는 함수 fff의 기울기가 구간 [a,b][a, b][a,b]에서 평균 기울기와 같은 점이 적어도 하나 존재함을 의미합니다.예시:함수 f(x)=x2f(x) = x^2f(x)=x2를 구간 [1,3][1, 3][1,3]에서 고려해보겠습니다. 이 함수는 연속이고 미분 가능하므로 라그랑주 중간값 정리를 적용할 수 있습니.. 2024. 7. 7.
라그랑주 승수법(Lagrange multiplier method) 라그랑주 승수법은 다음과 같은 최적화 문제를 해결하는 데 사용됩니다:목적 함수 f(x,y)f(x,y)f(x,y)를 최대화 또는 최소화 하려고 하고, 제약 조건 g(x,y)=0g(x,y) = 0g(x,y)=0이 있는 경우,라그랑주 함수(Lagrangian)를 정의합니다:L(x,y,λ)=f(x,y)+λ(g(x,y)−c) \mathcal{L}(x, y, \lambda) = f(x, y) + \lambda (g(x, y) - c) L(x,y,λ)=f(x,y)+λ(g(x,y)−c)여기서 λ\lambdaλ는 라그랑주 승수(Lagrange multiplier)입니다.최적화 문제는 다음의 조건을 만족하는 (x,y,λ)(x, y, \lambda)(x,y,λ)를 찾는 것입니다:∂L∂x=0\frac{\partial \mat.. 2024. 7. 7.
메모리 최적화 DP 예제 데이터를 사용하여 점화식을 설명하겠습니다.예제 데이터앱의 개수 $ N = 5 $확보해야 하는 메모리 $ M = 60 $각 앱이 사용 중인 메모리 $ \text{memory} = [30, 10, 20, 35, 40] $각 앱을 비활성화하는 데 드는 비용 $ \text{cost} = [3, 0, 3, 5, 4] $초기화먼저, dp 배열을 초기화합니다.total_cost = sum(cost) # 비용의 총합, 이 예제에서는 15dp = [0] * (total_cost + 1) # dp 배열 초기화, 길이는 16점화식 적용첫 번째 앱 $i = 0$:메모리: 30, 비용: 3for cost in range(15, 3 - 1, -1): dp[cost] = max(dp[cost], dp[cost - 3.. 2024. 7. 7.
비트 연산을 이용한 빠른 지수 연산 비트 연산을 이용한 빠른 지수 연산을 수행하는 방법으로는 흔히 "Exponentiation by Squaring"이라고 불리는 알고리즘이 사용됩니다. 이 알고리즘은 거듭제곱을 빠르게 계산하기 위해 분할 정복 기법을 사용하며, 특히 큰 수의 거듭제곱을 계산할 때 매우 효율적입니다.Exponentiation by Squaring 알고리즘 설명이 알고리즘은 지수를 2로 나누면서 제곱을 반복적으로 수행하여 거듭제곱을 계산합니다. 기본 아이디어는 다음과 같습니다:$n$이 짝수일 때: $x^n = (x^{n/2})^2$$n$이 홀수일 때: $x^n = x \cdot x^{n-1}$단계별 절차기본 사례:$ n = 0 $: $ x^0 = 1 $$ n = 1 $: $ x^1 = x $재귀 사례:$ n $이 짝수일 때: .. 2024. 7. 6.
깊이 우선 탐색 코드를 짜기 위한 도움 단계 ------깊이 우선 탐색(Depth-First Search, DFS)을 잘 수행하려면 다음의 사고 단계를 따르는 것이 유용합니다:1. 문제 이해그래프 또는 트리 구조: 문제에서 주어진 데이터가 그래프나 트리 형태인지 확인합니다.노드와 간선: 각 노드와 그 사이의 간선을 정의합니다.2. 자료 구조 선택그래프 표현: 인접 리스트(adjacency list)나 인접 행렬(adjacency matrix) 등 적절한 자료 구조를 선택합니다.방문 여부 체크: 노드의 방문 여부를 체크할 자료 구조를 선택합니다. 보통 리스트나 집합(set)을 사용합니다.3. DFS 동작 원리재귀적 접근: DFS는 재귀적으로 구현하는 것이 일반적입니다. 이때 재귀 호출이 깊어질 수 있으므로 최대 재귀 깊이에 주의합니다.스택 사용: 재.. 2024. 7. 6.
22950번🐨이진수 나눗셈 n, binary, div = open(0).read().split()n,div = map(int,(n,div))bottom_pos = binary[::-1].find("1")open(1,"w").write("YES\n" if bottom_pos == -1 or bottom_pos >= div else"NO\n") 2024. 6. 30.
숫자의 최하위 1인 비트가 2의 몇 승 자리인지 알아내기 ------숫자의 최하위 1인 비트가 2의 몇 승 자리인지 알아내기 위해서는 주어진 숫자의 2의 보수 (two’s complement)와의 AND 연산을 사용하면 됩니다. 이는 특정 숫자에서 가장 낮은 자리의 1인 비트의 위치를 효율적으로 찾는 방법입니다.예를 들어, 10진수 숫자 ( x )가 주어졌을 때, 그 숫자의 최하위 1인 비트가 2의 몇 승 자리인지 알아내는 방법은 다음과 같습니다:( x )와 ( -x )의 AND 연산을 수행합니다.즉, ( x ) & ( -x )를 계산합니다.결과의 비트 위치를 찾습니다.예시로 설명하면 다음과 같습니다:def find_lowest_set_bit_position(x): return (x & -x).bit_length() - 1# 예시x = 18 # 이진수로.. 2024. 6. 28.
많은 조건 분기 ------숫자 범위에 따른 조건분기를 빠르게 하기 위해서는 여러 방법을 사용할 수 있습니다. Python을 예로 들어, 다양한 방법을 소개하겠습니다.기본 조건문 사용:Python의 기본 조건문(if-elif-else)을 사용하여 범위에 따른 조건을 처리할 수 있습니다. 이는 직관적이지만 조건이 많아질수록 코드가 길어집니다.def categorize_number(num): if num 10: return "Less than 10" elif 10 num 20: return "Between 10 and 19" elif 20 num 30: return "Between 20 and 29" else: return "30 or more.. 2024. 6. 28.
암호 만들기 1759 def is_valid(password): vowels = set('aeiou') num_vowels = sum(1 for char in password if char in vowels) num_consonants = len(password) - num_vowels return num_vowels >= 1 and num_consonants >= 2def backtrack(start, path): if len(path) == L: if is_valid(path): print(''.join(path)) return for i in range(start, C): path.append(chars[i]) .. 2024. 6. 26.
6443 애너그램 https://www.acmicpc.net/problem/6443  문제 설명주어진 단어의 철자를 재배열하여 만들 수 있는 모든 단어를 출력하는 프로그램을 작성합니다.입력된 단어는 소문자로 이루어져 있으며, 알파벳 순서로 정렬된 상태로 출력해야 합니다.동일한 애너그램은 한 번만 출력합니다.예제 입력2abcacba예제 출력abcacbbacbcacabcbaaabcaacbabacabcaacabacbabaacbacabcaacaabcabacbaa단계별 설명1. 입력 처리입력된 단어의 수와 각 단어를 읽어옵니다. 이를 위해 sys.stdin을 사용하여 표준 입력을 처리합니다._, *cases = stdin.readlines()2. 애너그램 생성 함수애너그램을 생성하는 핵심 함수인 find_anagrams를 구현합니.. 2024. 6. 23.
리스트 인 리스트 문제- 값 전달과 객체 전달 https://www.sololearn.com/en/compiler-playground/cmz9Q7PhQ2s8 Node.JS Playground - LIST IN LIST Problem. SOLVED: Online Interpreter, Compiler & Editor | SololearnUse our FREE Python online compiler to write, run and share your code. Works directly from your browser without any additional installation.www.sololearn.com리스트를 객체 전달고 append하면 의도하지 않게 모든 원소가 바뀌는 문제2018년에 파이썬 공부할 때 처음에 많이 당황한다는 이 문제를 긴.. 2024. 6. 23.
스케치업이 교육용으로 무료였구나! 입체를 하거나 할 때 도움이 되는 스케치업을 무료로 사용할 수 있겠다! 2024. 6. 22.
비트 연산의 활용 https://www.acmicpc.net/problem/15917https://velog.io/@octo__/C-%EC%A3%BC%EC%96%B4%EC%A7%84-%EC%88%AB%EC%9E%90%EA%B0%80-2%EC%9D%98-%EC%A0%9C%EA%B3%B1%EC%88%98%EC%9D%B8%EC%A7%80-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0 [C++] 주어진 숫자가 2의 제곱수인지 확인하기알고리즘 문제에서 종종 주어진 수가 2의 제곱수($2^{n}$)인지 확인할 필요가 있다. 아래는 이를 위해 구현된 몇가지 예시들이다. while 문 사용 가장 쉽게 생각할 수 있는 방법 중 하나로 주어진 숫velog.iohttps://velog.io/@valentin123/%EB%.. 2024. 6. 17.
강아지 식사 방 만들기 def minimumRoomNeeded(times): #이벤트가 기록된 포인트의 집합을 일순하면서 #현재 시각과 일시하는 시작시간만큼 개수를 더하고 #현재시각과 일치하는 종료시각만큼 빼서 맥스값 관리. starts, ends = zip(*times) every = sorted(set(starts+ends)) rooms = 0 res=0 for p in every: rooms += starts.count(p)-ends.count(p) res = max(rooms,res) return resdef main(): N = int(input()) times = [] for _ in range(N): .. 2024. 6. 14.
룬 알고리즘 룬 알고리즘 (Luhn Algorithm)들어가며룬 알고리즘(Luhn Algorithm)은 1954년 IBM의 과학자 한스 피터 룬(Hans Peter Luhn)에 의해 개발된 단순한 오류 검출 알고리즘입니다. 주로 신용카드 번호, IMEI 번호 등 다양한 식별 번호의 유효성을 검증하는 데 사용됩니다. 이 글에서는 룬 알고리즘의 작동 원리, 숫자 예시, 코드 예시, 그리고 실생활 적용 사례에 대해 자세히 설명하겠습니다.룬 알고리즘의 작동 원리룬 알고리즘은 다음과 같은 단계를 거쳐 유효성을 검증합니다:오른쪽에서 왼쪽으로 모든 자리를 확인합니다.짝수 위치에 있는 숫자(맨 오른쪽 숫자는 1번 위치)를 두 배로 만듭니다. 만약 두 배로 만든 숫자가 9보다 크면 각 자릿수를 더해 한 자릿수로 만듭니다.모든 자리 .. 2024. 6. 14.
라즈베리파이 클러스터 병렬처리 테스트 1 멘델브로트 집합 그리기 import numpy as npimport matplotlib.pyplot as pltfrom mpi4py import MPIimport timedef mandelbrot(c, max_iter): z = c for n in range(max_iter): if abs(z) > 2: return n z = z*z + c return max_itercomm = MPI.COMM_WORLDrank = comm.Get_rank()size = comm.Get_size()# 이미지 크기와 맨델브로트 집합의 범위 설정width, height = 800, 800re_start, re_end = -2, 1im_start, im_end = -1.5, 1.5max_.. 2024. 6. 12.