전체 글 135

[BOJ] 1107번: 리모콘

■ 문제 해설 - 현재 채널에서 + 혹은 -만 사용하여 이동하는 경우 - range(100001)로 잡은 이유는 +일 경우보다 -일 경우가 더 최적의 해를 가질 수 있기 때문 - 가장 가까운 버튼 + 길이 (가장 가까운 위치만큼 리모콘을 누르기 때문에 +len(channel)) - 브루트 포스 ■문제 해답 import sys input = sys.stdin.readline n = int(input()) m = int(input()) broken = list(map(int, input().split())) min_count = abs(100 - n) # 현재 채널에서 + 혹은 -만 사용하여 이동하는 경우 for channel in range(1000001): channel = str(channel) for..

Algoritm/BOJ 2022.04.20

[BOJ] 1476번: 날짜 계산

■ 문제 해설 - 브루트 포스 - 입력 값이 조건을 충족할 때 까지 while을 통해 반복 - 조건 충족 시 break ■ 문제 해답 import sys input = sys.stdin.readline e_i, s_i, m_i = map(int, input().split()) e, s, m, year = 1, 1, 1, 1 while True: if e_i == e and s == s_i == s and m_i == m: break e += 1 s += 1 m += 1 year += 1 if e >= 16: e = 1 if s >= 29: s = 1 if m >= 20: m = 1 print(year) 문제 출처 : https://www.acmicpc.net/problem/1476 1476번: 날짜 계산..

Algoritm/BOJ 2022.04.20

[BOJ] 3085번: 사탕 게임

■ 문제 풀이 - 행/열의 크기를 리턴하는 함수를 구축 (check) - 크기 비교 후 제일 큰 값 리턴 - 브루트 포스 ■문제 해답 import sys input = sys.stdin.readline def check(board): n = len(board) answer = 1 for i in range(n): # 열 cnt = 1 for j in range(1, n): if board[i][j] == board[i][j - 1]: cnt += 1 else: cnt = 1 # 비교 후 현재 cnt가 더 크다면 answer 갱신 if cnt > answer: answer = cnt # 행 cnt = 1 for j in range(1, n): if board[j][i] == board[j - 1][i]: ..

Algoritm/BOJ 2022.04.20

[BOJ] 2309번: 일곱 난쟁이

■ 문제 풀이 - 브루트 포스 문제 - (9명의 난쟁이의 합 - 100) 한 후 나머지 두명의 합을 찾아내면 됨 ■ 문제 해답 import sys input = sys.stdin.readline arr = list(int(input().rstrip()) for _ in range(9)) result = sum(arr) - 100 num1 = 0 num2 = 0 for i in range(8): for j in range(i + 1, 9): if (arr[i] + arr[j] == result): num1 = arr[i] num2 = arr[j] arr.remove(num1) arr.remove(num2) arr.sort() for i in arr : print(i) 문제출처: https://www.acm..

Algoritm/BOJ 2022.04.20

[BOJ] 1260번: DFS와 BFS

■ 문제 풀이 dfs와 bfs 알고리즘의 정석 풀이 ■ 문제 해답 from collections import deque import sys input = sys.stdin.readline # n = 정점의 개수 / m = 간선의 개수 / v = 시작할 정점 n, m, v = map(int, input().split()) graph = [[] for i in range(n + 1)] for i in range(m): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) visited_dfs = [False] * (n + 1) visited_bfs = [False] * (n + 1) def dfs(v): visited_dfs[v] = ..

Algoritm/BOJ 2022.04.14

[BOJ] 13023번: ABCDE

■ 문제 풀이 그래프의 길이가 4 이상인 경우 조건 충족 (1) 시작하는 지점이 다를 경우 값 또한 달라지므로 완전 탐색으로 진행 dfs를 이용하여 풀이 진행 ■ 문제 해답 import sys input = sys.stdin.readline n, m = map(int, input().split()) # 리스트 행렬 graph = [[] for i in range(n)] for i in range(m): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) visited = [False] * n ans = False # 깊이 탐색 진행 def dfs(v, depth): global ans if depth == 4: ans = True..

Algoritm/BOJ 2022.04.14

[Monitoring] Thanos

■ Thanos란? Prometheus의 확장성, 가용성, Retention 문제 등 부족한 부분을 보완하여 기능을 제공하기 위해 Thanos가 탄생 ■ Thanos 특징 ▶ Thanos에서 말하는 특징은 총 4가지로 다음과 같음 1. Global Query View · Prometheus Server 및 Cluster에서 Prometheus Metric Query를 화성화해서 Prometheus 설정을 확장 2. Unlimited Retention · 원하는 Scale이 가능한 Object Storage System을 통해 Metirc을 무제한으로 저장 가능 - GCP, S3, Azure, Swift 및 Tencent COS를 지원 3. Prometheus Compatible · Prometheus와 ..

DevOps/Monitoring 2022.04.07

[Monitoring] Grafana

■ Grafana란? · Grafana는 Open Source Monitoring 시각화 Tool · Grafana를 사용하면 저장된 위치에 상관없이 Metric을 Query, 시각화, Alert을 이해 가능 · Dashboard 생성, 탐색, 공유 가능 · Data 중심의 시각화 제공 · Plug 가능한 Data Source Model을 가지고 있으며 Graphite, Pormetheus, Elasticsearch, OpenTSDB, InfluxDB와 같은 시계열 Database를 풍부하게 지원 · MySQL, Postgres와 같은 SQL Database와 같은 Cloud Monitoring 공급 업체를 기본적으로 지원 · 많은 장소의 Data를 단일 Dashboard로 결합할 수 있는 유일한 도구 ..

DevOps/Monitoring 2022.04.07

[Monitoring] Prometheus

■ Prometheus란? · Prometheus는 Open Source Monitoring Tool · Metric 수집, 시각화, Alert, Service Decovery 기능 제공 · SoundCloud에서 탄생 · Kubernetes에 이어서 두번째로 CNCF Project 멤버로 추가 ■ Prometheus 특징 1. 차원 데이터 · 시계열은 지표 이름과 일련의 Key-Value 쌍으로 식별 · 다양한 Exporter를 통해 Service/System Metric을 수집 ex) Node Exporter는 CPU, Memory의 Metric 정보 수집 2. 강력한 검색 · PromQL을 기반으로 Graph, Table, Alert을 생성하기 위해 수집 된 시계열 데이터를 검색 가능 3. 시각화 ..

DevOps/Monitoring 2022.04.07