본문 바로가기

전체 글239

라즈베리파이 클러스터 병렬처리 테스트 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.
RaspberryPi5 클러스터 만들기 - K3S 설치 아주 긴 시간의 시행착오 끝에 쿠버네티스 설치에 성공했다.처음부터 라즈베리파이 공식 홈페이지랑 외국 블로그 글을 참고할 것을...우리나라 구버전 설명 보고 한 번 꼬이고 두 번 꼬이고 한 달이 날아갔다.(특히 챗 gpt의 조언을 주의해야 한다 ㅋㅋㅋ)K8S와 ansible을 깔려다가 실패하고 한 달쯤 고생하다가 이미지를 시원하게 밀어버리고 k3s를 깔았다.공식 사이트의 글 중 설치 방법을 번역하고 일부 추가해서 올려두면 다음 번에 도움이 될 것 같아서 글로 남긴다.https://everythingdevops.dev/step-by-step-guide-creating-a-kubernetes-cluster-on-raspberry-pi-5-with-k3s/ Step-by-Step Guide: Creating a.. 2024. 6. 8.
BFS DFS import sysfrom collections import defaultdictdef dfs(x, y, house_count): # 현재 위치를 방문 처리 visited[(x, y)] = True house_count[0] += 1 # 상하좌우 방향 정의 directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] # 상하좌우로 이동하며 연결된 집 찾기 for direction in directions: nx, ny = x + direction[0], y + direction[1] if 0 import sysfrom collections import deque, defaultdictdef bfs(x, y): #.. 2024. 6. 8.
🐨5525]IOIOI🐍(feat번뜩이는 아이디어가 안 좋았던 건에 대하여) https://www.acmicpc.net/problem/5525나름대로 이런 아이디어를 떠올리고 좋아했는데....#패턴과 부분 문자열을 뒤쪽부터 비교해서 연속 몇 개가 맞거나 틀렸는지 살펴봅니다.def compare(a, b, len_pattern): count = 0 same = a[-1] == b[-1] for i in range(1, len_pattern+1): if (a[-i] == b[-i]) == same: count += 1 else: #same이 1이면, 홀수면 그대로 짝수면 1 빼기, #same이 0이면, 홀수면 1 빼고 짝수면 그대로 count -=int(same)-.. 2024. 6. 6.
다중조건의 비트화 FizzBuzz 0.5 초1024 MB145894585866.875%문제FizzBuzz 문제는 𝑖=1,2,⋯$i = 1, 2, \cdots$ 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다.$i$가 $3$의 배수이면서 $5$의 배수이면 “FizzBuzz”를 출력합니다.$i$가 $3$의 배수이지만 $5$의 배수가 아니면 “Fizz”를 출력합니다.$i$가 $3$의 배수가 아니지만 $5$의 배수이면 “Buzz”를 출력합니다.$i$가 $3$의 배수도 아니고 $5$의 배수도 아닌 경우 $i$를 그대로 출력합니다.FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다. 이때, 이 세 문자열 다음에 올 문자열은 무엇일까요?입력FizzBuzz 문제에서 연속으로 출력된 세 개의 문.. 2024. 6. 6.
클러스터 빌드 모르겠다...왜 자꾸 에러가 나는지. 2024. 6. 2.
쿠버네트스와 라즈베리파이 클러스터 구축 라즈베리 파이(Raspberry Pi) 클러스터에서 쿠버네트스를 사용하는 이유는 다음과 같은 여러 가지 이유가 있습니다:저비용 학습 및 테스트 환경: 라즈베리 파이는 저비용의 소형 컴퓨터로, 대규모의 클라우드 인프라를 구축하지 않고도 쿠버네트스를 학습하고 테스트할 수 있는 환경을 제공합니다. 이는 개인 개발자나 소규모 팀이 실습을 통해 클라우드 네이티브 기술을 익히는 데 유리합니다.에너지 효율성: 라즈베리 파이는 매우 적은 전력을 소비하므로, 다수의 노드를 포함한 클러스터를 운영하는 데 있어 에너지 비용을 절감할 수 있습니다. 이는 실험적이거나 교육용 프로젝트를 장기간 운영하는 데 적합합니다.휴대성 및 유연성: 라즈베리 파이 클러스터는 휴대가 간편하고 물리적인 공간을 많이 차지하지 않으므로, 다양한 장소.. 2024. 6. 2.
잘못 작성한 요세푸스 문제 https://www.acmicpc.net/problem/1215 k가 37인 경우를 보면,첫째, k // i의 값이 37, 18, 12, 9,7, 6, 5, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 인데,이 값과 나머지 값의 패턴이 상관있어 보임.둘쨰, 피크를 이루다가 감소하는 구간에서 감소하는 기울기는 그 구간의 k//i 값임.셋째,  k // i의 값의 구간별 변화량을 보면 아래와 같은데, 이것은 반대편 구간의 길이와 같음. 즉, 구간 시작 구간의 i의 개수와 같음. (마지막은 0으로 간주) 1 × 372 × 183 × 124 × 95 × 76 × 67 × 59 × 412 × 318.. 2024. 5. 27.
Knuth's Optimization 크누스 최적화(Knuth's Optimization)는 동적 프로그래밍(DP)에서 특정 유형의 문제를 더 효율적으로 해결하기 위해 사용. 주로 분할 정복 및 DP를 사용하는 문제에서 특히, 점화식이 특정 성질을 만족하는 경우에 최적화가 가능.일반적인 $O(n^3)$의 시간 복잡도를 $O(n^2)$로 줄일 수 있다.조건크누스 최적화를 적용하려면 두 가지 주요 조건이 충족되어야 합니다:점화식의 적합성: DP 점화식이 특정 형태를 가져야 합니다.사각 부등식(사각 부등식의 단조 증가 조건): 최적의 분할점이 단조 증가해야 합니다.점화식의 적합성DP 점화식이 다음과 같은 형태를 가져야 합니다:$DP[i][j] = \min_{k \leq m 여기서 $C[i][j]$는 구간 $[i, j]$의 비용입니다.이 점화식의 .. 2024. 5. 27.
🐨11066_파일 합치기_🐍Knuth's Optimization 파일 합치기2 초256 MB32329161471093248.801%문제소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본이 들어있는 한 개의 파일을 만든다. 이 과정에서 두 개의 파일을 합쳐서 하나의 임시파일을 만들고, 이 임시파일이나 원래의 파일을 계속 두 개씩 합쳐서 소설의 여러 장들이 연속이 되도록 파일을 합쳐나가고, 최종적으로는 하나의 파일로 합친다. 두 개의 파일을 합칠 때 필요한 비용(시간 등)이 두 파일 크기의 합이라고 가정할 때, 최종적인 한 개의 파일을 완성하는데 필요한 비용의 총 합을 계산하시오.예를 들어, C1, C2, C3, C4가 연속적.. 2024. 5. 23.
🐨BOJ#1300] K번째 수 https://www.acmicpc.net/problem/1300 아이디어1 (구현+약간의 최적화)n × n크기의 배열을 생성해서 일렬로 만든 뒤 개수를 Counter라이브러리로 세어서 키를 정렬해서 탐색아이디어2 (약간의 최적화)n × n크기의 배열을 처음부터 일렬로 만든 뒤 개수를 Counter라이브러리로 세어서 키를 정렬해서 탐색from collections import Countern = int(input())k = int(input())c = Counter([i*j for i in range(1, n+1) for j in range(1, n+1)])tot = 0for key in sorted(c.keys()): tot += c[key] if tot >= k: print(k.. 2024. 5. 23.
🐨BOJ#17614]3,6,9 from collections import Counter# n까지의 숫자를 문자열로 변환하여 하나의 긴 문자열로 만듭니다.def count_threes(n): long_string = ''.join(str(num) for num in range(1, n+1)) counter = Counter(long_string) return counter['3']+counter['6']+counter['9']n = int(input())result = count_threes(n)print(result)나이브하게 그냥 문자열로 숫자를 이어 붙인 뒤 카운터로 세어서 더했다. 520ms의 결과를 얻었다.그런데 생각해 보니 일정 구간마다 정해진 수의 3,6,9가 등장하기 때문에(균일하게 규칙적으로 분포) 하나.. 2024. 5. 17.
lru_cache lru_cache는 Python의 functools 모듈에 있는 데코레이터로, 함수의 결과를 캐시하여 동일한 인풋에 대해 함수를 여러 번 호출하는 것을 피하는 데 사용됩니다. lru_cache는 “Least Recently Used (LRU)” 캐싱을 사용하여 메모리를 관리합니다. 이는 캐시가 가득 찼을 때 가장 오래된 항목을 삭제하는 방식입니다.다음은 lru_cache에 대한 자세한 설명입니다:기본 사용법from functools import lru_cache@lru_cache(maxsize=128)def some_function(x): # 함수의 본문 return x * x@lru_cache(maxsize=128): 이 데코레이터는 함수의 반환값을 캐시합니다. maxsize는 캐시할 최대 .. 2024. 5. 17.
🐨BOJ#15686]치킨 배달 from itertools import combinationsdef read_input(): data = open(0).read().split() N = int(data[0]) M = int(data[1]) city = [list(map(int, data[i*N+2:(i+1)*N+2])) for i in range(N)] return N, M, citydef find_locations(city, N): chicken, house = [], [] for r in range(N): for c in range(N): if city[r][c] == 1: house.append((r, c)) eli.. 2024. 5. 13.
🐨BOJ#3293]MONKEY from collections import dequedef read_ints(): return map(int, input().split())def main(): N, S = read_ints() connections = [] initial_state = [] # 방과 연결 정보, 초기 잠금 상태를 입력받음 for _ in range(N): data = list(read_ints()) initial_state.append(data[0]) connections.append(data[2:]) # 스위치 정보 입력 받음 switches = [] for _ in range(S): data = list(.. 2024. 5. 12.
🐨BOJ# 11053]가장 긴 증가하는 부분 수열 import sysdef input():return sys.stdin.readline().rstrip()def lis(arr): n = len(arr) dp = arr[:] # 각 원소를 포함하는 부분 수열의 합의 초기값은 자기 자신으로 시작 for i in range(1, n): for j in range(i): if arr[i] > arr[j]: # arr[i]가 arr[j]보다 클 경우 dp[i] = max(dp[i], dp[j] + arr[i]) # 최대 합을 업데이트 return max(dp)n = int(input())a = list(map(int, input().split()))print(lis(a))imp.. 2024. 5. 12.
🐨BOJ#5582]공통 부분 문자열 시간 초과가 나서 파이파이로 돌렸더니 틀렸대서 살펴보니 dp탐색 범위가 틀렸음^^;;(마지막 행과 열을 빠뜨림)dp로 풀기 위해 대조 테이블을 만들었다.이전까지 연속적으로 같은 개수를 활용하기 위해 패딩으로 0을 좌측과 상단열에 붙였다.시작 위치 배열은[(1, 16), (1, 15), (1, 14), (1, 13), (1, 12), (1, 11), (1, 10), (1, 9), (1, 8), (1, 7), (1, 6), (1, 5), (1, 4), (1, 3), (1, 2), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1)]  [(0,y) for y in range(len(string_2)-1,.. 2024. 5. 6.
🐨결정 문제와 최적화 문제: 이해와 예시 결정 문제와 최적화 문제: 이해와 예시결정 문제 (Decision Problem)결정 문제는 ‘예’ 또는 '아니오’로 답할 수 있는 문제입니다. 예를 들어, "주어진 그래프에 사이클이 있는가?"와 같은 문제가 결정 문제입니다.예시: 소수 판별 문제주어진 숫자가 소수인지 판별하는 결정 문제는 다음과 같이 정의할 수 있습니다:Input: 양의 정수 nOutput: n이 소수인지 여부 (예: “Yes” 또는 “No”)def is_prime(n): if n 결정 문제 예시: 그래프에서 사이클 판별하기Input: 무방향 그래프 GOutput: 그래프 G에 사이클이 존재하는지 여부 (예: “Yes” 또는 “No”)def has_cycle(graph): visited = set() for node i.. 2024. 5. 3.