본문 바로가기

분류 전체보기241

for 문에서의 open(1,"w").write for 문에서 open(1, "w").write을 사용하는 것은 파일에 데이터를 반복적으로 쓸 때 유용하다. 예를 들어, 숫자 리스트를 파일에 하나씩 쓰고 싶다면 다음과 같이 할 수 있다.# 예제 데이터data = [1, 2, 3, 4, 5]# 파일에 데이터를 쓰기with open('output.txt', 'w') as f: for item in data: f.write(f"{item}\n")이 코드는 리스트 data의 각 항목을 output.txt 파일에 줄 바꿈과 함께 작성한다.여기서 중요한 점은 open 함수를 사용할 때 with 문을 사용하는 것이다. with 문은 파일을 안전하게 열고 닫을 수 있도록 해준다.만약 숫자 리스트를 표준 출력(콘솔)에 쓰고 싶다면, sys.stdou.. 2024. 7. 11.
🐨이상한 입력, 이터레이터, 비트연산, 리스트 인덱싱과 슬라이싱 1. 이상한 입력파이썬에서 파일 입출력을 위한 open 함수는 파일을 열고, 읽기, 쓰기, 추가 등의 작업을 할 수 있도록 해준다.기본 사용법open(filename, mode)filename: 열 파일의 이름과 경로mode: 파일을 여는 모드 (기본값은 ‘r’)파일 모드'r': 읽기 모드 (파일이 존재하지 않으면 오류 발생)'w': 쓰기 모드 (파일이 존재하면 내용 삭제 후 새로 작성)'a': 추가 모드 (파일 끝에 내용을 추가)'b': 바이너리 모드 (모드에 추가하여 사용, 예: 'rb', 'wb')'+': 읽기/쓰기 모드 (모드에 추가하여 사용, 예: 'r+', 'w+', 'a+')예제파일 읽기with open('example.txt', 'r') as file: content = file.re.. 2024. 7. 11.
1520🐨내리막 길-동적 프로그래밍 https://www.acmicpc.net/problem/1520알고리즘 설명: DFS와 동적 프로그래밍을 사용한 경로 수 계산이 글에서는 주어진 그리드에서 출발점(0, 0)에서 도착점(M-1, N-1)까지의 경로 수를 계산하는 알고리즘을 설명한다. 이 알고리즘은 DFS(깊이 우선 탐색)와 동적 프로그래밍을 결합하여 효율적으로 모든 가능한 경로를 탐색하고 경로 수를 계산한다.1. 코드 개요다음은 전체 코드이다. 이를 부분적으로 나누어 설명하겠다.import syssys.setrecursionlimit(10**6)def count_paths(M, N, grid): dp = [[-1] * N for _ in range(M)] # dp 배열 초기화 def dfs(x, y): if .. 2024. 7. 11.
영어 대본 생성기와 생성 결과 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.