Problem Solving/Baekjoon
-
[백준] 7569번 문제 (토마토) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 10. 10:15
https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net import sys from collections import deque input = sys.stdin.readline q = deque() def bfs(): global result while q: qh, qn, qm = q.popleft() for d in range(6): nh = qh + dh[d] nn = qn + dn[d] nm = qm + dm[d] if 0
-
[백준] 12852번 문제 (1로 만들기 2) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 9. 17:21
https://www.acmicpc.net/problem/12852 12852번: 1로 만들기 2 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다. www.acmicpc.net n = int(input()) dp = [i for i in range(n + 1)] dp[1] = 0 history = [i for i in range(n + 1)] history[1] = 0 for i in range(2, n + 1): dp[i] = dp[i - 1] + 1 history[i] = i - 1 if i % 3 == 0 and dp[i] > dp[i // 3] + 1: dp[i] = dp[i // 3] + 1 history[i] = i // 3 if i % 2 == 0 and dp[i..
-
[백준] 1021번 문제 (회전하는 큐) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 9. 09:34
https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net from collections import deque from sys import stdin input = stdin.readline n, m = map(int, input().split()) target_nums = deque(list(map(int, input().split()))) q = deque([i for i in range(1, n + 1)]) count = 0 while len(..
-
[백준] 16948번 문제 (데스나이트) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 7. 15:55
https://www.acmicpc.net/problem/16948 16948번: 데스 나이트 게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다. 크 www.acmicpc.net from collections import deque def bfs(y, x): q = deque() q.append((y, x)) graph[y][x] = 0 while q: y, x = q.popleft() for dy, dx in d: ny, nx = y+dy, x+dx if 0
-
[백준] 1010번 문제 (다리 놓기) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 7. 13:20
https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net dp = [[1] * 31 for _ in range(31)] for i in range(31): dp[1][i] = i for i in range(2, 31): for j in range(i + 1, 31): dp[i][j] = dp[i][j - 1] + dp[i - 1][j - 1] t = int(input()) for _ in range(t): n, m = map(int, input().sp..
-
[백준] 5567번 문제 (결혼식) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 7. 10:53
https://www.acmicpc.net/problem/5567 5567번: 결혼식 예제 1의 경우 2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2, 3, 4 3명의 친구를 결혼식에 초대 www.acmicpc.net import sys import collections input = sys.stdin.readline n = int(input()) m = int(input()) graph = collections.defaultdict(list) friends = set() for i in range(m): a, b = map(int, input().split()) graph[a].append(b)..
-
[백준] 11866번 문제 (요세푸스 문제 0) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 7. 09:43
https://www.acmicpc.net/problem/11866 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net from collections import deque from sys import stdin input = stdin.readline n, k = map(int, input().split()) q = deque([i for i in range(1, n + 1)]) result = [] q.rotate(-(abs(k - 1))) while q: result.append(q.popleft()) q.rotate(-(abs(k - 1))) print("") 입력받은 숫자를 기준으로 수열을..
-
[백준] 1697번 문제 (숨바꼭질) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 7. 09:11
https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net from collections import deque n, k = map(int, input().split()) visited = [False] * 100001 q = deque() q.append([n, 0]) while q: pivot, d = q[0][0], q[0][1] if pivot == k: break q.popleft() visited[pivot] = Tr..
-
[백준] 11399번 문제 (ATM) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 6. 13:29
https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net import sys input = sys.stdin.readline n = int(input()) ns = sorted(list(map(int, input().split()))) count = 0 if n == 1: print(ns[0]) else: for i in range(1, len(ns)): ns[i] += ns[i - 1] print(sum(ns)) 뭔가 문제 설명은 긴데.. 되게 단순한 문제다. 정렬을 해주고 for..