Algorithm
[백준] 최소비용 구하기 / 1916번 / 파이썬 / python
💡solutions ) 💬 dijkstra(다익스트라) 알고리즘 유형의 기본 문제 🎫code ) import sys import heapq def dijkstra(n, s, e): dist = [INF] * (n + 1) dist[s] = 0 heap = [] heapq.heappush(heap, [0, s]) while heap: cost, node = heapq.heappop(heap) for n, c in adj[node]: c += cost if c < dist[n]: dist[n] = c heapq.heappush(heap, [c, n]) return dist[e] input = sys.stdin.readline n = int(input()) m = int(input()) adj = [[] fo..
[백준] 숨바꼭질 / 1697번 / 파이썬 / python
🎫code ) from collections import deque # 너비 우선 탐색 n, k = map(int, input().split(' ')) arr = [0] * (k + 1) max_v = 100001 visit = [0] * max_v q = deque([n]) da = [-1, 1, 2] while q: a = q.popleft() if a == k: print(visit[a]) break for i in range(3): if i == 2: na = a * da[i] else: na = a + da[i] # a가 기존, na는 다시 돌아왔을 때 비교 if (0
[백준] 1로 만들기 / 1463번 / 파이썬 / Python
🎫code ) n = int(input()) dp = [0 for _ in range(n + 1)] for i in range(2, n + 1): dp[i] = dp[i - 1] + 1 print(dp, '0') if i % 2 == 0 and dp[i] > dp[i // 2] + 1: dp[i] = dp[i // 2] + 1 print(dp, '1') if i % 3 == 0 and dp[i] > dp[i // 3] + 1: dp[i] = dp[i // 3] + 1 print(dp, '2') print(dp[n]) 📌 description ) 문제출처 : www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진..
[백준] 효율적인 해킹 / 1325번 / 파이썬 / Python
🎫code ) import sys from collections import deque input = sys.stdin.readline def bfs(lst): q = deque(lst) while q: x = q.popleft() visit[x] = 1 for i in adj[x]: if not visit[i]: q.append(i) visit[i] = 1 return visit.count(1) n, m = map(int, input().split(' ')) adj = [[] for _ in range(n + 1)] for _ in range(m): a, b = map(int, input().split(' ')) adj[b].append(a) res = [] max_v = 0 for i in range..
[백준] 차이를 최대로 / 10819번 / 파이썬 / Python
💡solutions ) 💬 n값이 크지 않으니까, permutations 써서 모든 경우를 찾는 브루트포스 알고리즘 구현 🎫code ) import sys from itertools import permutations as permu input = sys.stdin.readline n = int(input()) arr = list(map(int, input().rstrip().split(' '))) max_v = 0 for p in permu(arr, n): sum = 0 n_list = list(p) for i in range(1, len(n_list)): tmp = abs(n_list[i - 1] - n_list[i]) sum += tmp max_v = max(max_v, sum) print(max_..
[백준] 그룹 단어 체커 / 1316번 / 파이썬 / Python
🎫code ) cnt = 0 for i in range(int(input())): word = input() word_lst = [word[0]] for k in range(1, len(word)): if word[k] != word[k - 1]: word_lst.append(word[k]) word_set = set(word_lst) if len(word_lst) == len(word_set): cnt += 1 print(cnt) 📌 description ) 문제출처 : www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두..
[백준] 유기농배추 / 1012번 / 파이썬 / Python
🎫code ) for tc in range(1,int(input())+1): m, n, k = map(int,input().split()) arr = [[0]*m for _ in range(n)] stack = [] cnt = 0 dx = [-1,1,0,0] dy = [0,0,-1,1] for i in range(k): y, x = map(int,input().split()) arr[x][y] = 1 for i in range(m): for j in range(n): if arr[j][i] == 1: stack.append((j,i)) while stack: x, y = stack.pop() arr[x][y] = 2 for k in range(4): nx, ny = x+dx[k], y+dy[k] if 0
[백준] LCS / 9251번 / 파이썬 / Python / 최장 공통 부분수열
🎫code ) s1 = input() s2 = input() matrix = [[0] * (len(s2) + 1) for _ in range(len(s1) + 1)] for i in range(1, len(s1) + 1): for j in range(1, len(s2) + 1): if s1[i - 1] == s2[j - 1]: matrix[i][j] = matrix[i - 1][j - 1] + 1 else: matrix[i][j] = max(matrix[i - 1][j], matrix[i][j - 1]) print(matrix[-1][-1]) 📌 description ) 문제출처 www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence..
[프로그래머스] 베스트앨범 / 파이썬 / Python / 해시
💫solutions ) 💬 defaultdict, heapq 모듈 사용 👩💻 code ) from collections import defaultdict import heapq def solution(genres, plays): gen = defaultdict(list) cnt = defaultdict(int) for i in range(len(genres)): heapq.heappush(gen[genres[i]], (-plays[i], i)) cnt[genres[i]] += plays[i] cnt_lst = [] for k, v in cnt.items(): cnt_lst.append((v, k)) cnt_lst.sort(key=lambda x: -x[0]) answer = [] count = 0 fo..
[백준] 체스판 다시 칠하기 / 1018번 / 파이썬 / Python
🎫code ) import sys def chess(a, b, c): cnt = 0 for i in range(a, a + 8): for j in range(b, b + 8): if i == a and j == b: if c == 'W': chk = 'B' if bg[i][j] != c: cnt += 1 else: chk = 'W' if bg[i][j] != c: cnt += 1 continue if chk == 'W': if bg[i][j] != 'W': cnt += 1 chk = 'B' else: if bg[i][j] != 'B': cnt += 1 chk = 'W' if chk == 'W': chk = 'B' else: chk = 'W' return cnt input = sys.stdin.readli..
[백준] 보물 / 1026번 / 파이썬 / Python
🎫code ) import sys input = sys.stdin.readline n = int(input()) a = list(map(int, input().rstrip().split(' '))) t_b = list(map(int, input().rstrip().split(' '))) b = [] for idx, val in enumerate(t_b): b.append((val, idx)) a.sort() b.sort(key=lambda x: -x[0]) res = 0 for i in range(n): tmp = a[i] * b[i][0] res += tmp print(res) 📌 description ) 문제출처 : www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이..
[백준] 스택 수열 / 1874번 / 파이썬 / python
🎫code ) from sys import stdin input = stdin.readline n = int(input()) nums = [int(input()) for _ in range(n)] cnt, s, res = 1, [], [] # res 결과값 리스트 for i in nums: while i >= cnt: s.append(cnt) res.append('+') cnt += 1 if s.pop() != i: print('NO') break else: res.append('-') else: print('\n'.join(res)) 📌 description ) 문제출처 : www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push..