📌문제 출처 솔브닷 3+ 클래스 단계 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍 www.acmicpc.net ❓ 문제 ❗ 풀이 bfs 활용 풀이 📗 풀이 코드 import sys from collections import deque, defaultdict input = sys.stdin.readline def bfs(i): stack = deque([i]) while stack: for j in dic[stack.popleft()]: if not visited[j] : #..
📌문제 출처 솔브닷 3+ 클래스 단계 https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net ❓ 문제 ❗ 풀이 set 자료구조 활용 📗 풀이 코드 import sys input = sys.stdin.readline n,m = map(int,input().split()) no_listen = set([input().strip() for _ in range(n)]) no_see = set([input().strip() for _ in range(m)])..
📌문제 출처 솔브닷 3+ 클래스 단계 https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net ❓ 문제 ❗ 풀이 dp 활용 📗 풀이 코드 import sys input = sys.stdin.readline dp = {0:1,1:1,2:2} for i in range(3,12): dp[i]=dp[i-3]+dp[i-2]+dp[i-1] for _ in range(int(input())): print(dp[int(input())]) 📗 코드 해설 해당 문제는 하나씩 수열을 늘려가다보면 점화식은 금방 찾을 수 있다. dp[i] = dp[i-3] + dp[i-2..
📌문제 출처 솔브닷 클래스 3+ 단계 https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net ❓ 문제 ❗ 풀이 hash 자료구조 활용 📗 풀이 코드 import sys input = sys.stdin.readline n,m = list(map(int,input().split())) dic = {} for i in range(1,n+1) : name = input().strip() dic[str(i)] = name dic[n..
📌문제 출처 솔브닷 클래스 3+ 단계 https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net ❓ 문제 ❗ 풀이 bfs 활용 📗 풀이 코드 import sys from collections import defaultdict, deque input = sys.stdin.readline def bfs(n): stack = deque([[n,0]]) cnt = 0 while stack: i,cnt = stack.popleft() if i==1: return cnt cnt += 1 if (not i%3)and (not visited[i//3]): stack.append([i..
📌문제 출처 솔브닷 클래스 3+ 단계 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net ❓ 문제 ❗ 풀이 BFS 응용 📗 풀이 코드 import sys from collections import deque input = sys.stdin.readline # bfs 생성 def bfs(): # 익은 토마토 위치(y행, x열)로부터 다음날 익게되는 토마토 위치 추가 global stack, not_good cnt = 0 # 최초 날짜..
📌문제 출처 백준 단계별 문제풀이 - 동적계획법 2단계 https://www.acmicpc.net/problem/2629 2629번: 양팔저울 첫째 줄에는 추의 개수가 자연수로 주어진다. 추의 개수는 30 이하이다. 둘째 줄에는 추의 무게들이 자연수로 가벼운 것부터 차례로 주어진다. 같은 무게의 추가 여러 개 있을 수도 있다. 추의 무 www.acmicpc.net ❓ 문제 ❗ 풀이 deque와 defaultdict 사용 📗 풀이 코드 import sys input = sys.stdin.readline from collections import defaultdict, deque _ = int(input()) weights = deque(list(map(int,input().split()))) _ = int..
📌문제 출처 백준 단계별 문제풀이 - 동적 계획법 2단계 https://www.acmicpc.net/problem/11049 11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같 www.acmicpc.net ❓ 문제 ❗ 풀이 동적계획법 2단계 11066 파일합치기와 유사한 풀이 활용 https://nembizzang.tistory.com/135 📗 풀이 코드 import sys input = sys.stdin.readline n = int(input()) nums = [list(map(int,input().split())) for ..