본문 바로가기

코딩 문제/백준

(10)
[백준_14502번] 연구소 (python) 문제 링크 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 첫번째 풀이 from collections import deque import copy from itertools import combinations n, m = map(int, input().split()) MAP = [] for _ in range(n): MAP.append(list(map(int, input().split()))) def bfs(start): global graph ''' st..
[백준_14501번] 퇴사 (Python) 문제 링크 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 내 풀이 def sol(): n = int(input()) t, p = [0],[0] for i in range(n): tt, pp = map(int, input().split()) t.append(tt) p.append(pp) dp = [0] * (n+2) for day in range(n,0,-1): if day + t[day] > n+1: dp[day] = dp[day + 1] else: dp[day] = max(p[day] + dp[day + t[day]], dp[day+1]) print(dp[1]) if __nam..
[백준_14499번] 주사위 굴리기 https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 내풀이 def move(d): global dice1, dice2, dice3 # 동쪽이동 # 좌->위 위->우, 우,아래 아래가 좌 if d == 1: dice2, dice1 = dice1, dice2[::-1] # 서쪽이동 # 위->좌, 아래->우, 좌-> 아래, 우-> 위 elif d == 2: dice1, dice2 = di..
[백준_13458번] 시험 감독(python) https://www.acmicpc.net/problem/13458 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 첫번째 풀이 (백준은 numpy 지원하지 않음 ㅠㅠ) import numpy as np def sol(): A = int(input()) # 시험장 수 students = list(map(int,(input().split()))) # 시험장 별 학생 수 supervisers, sub_supervisers = map(int,(input().s..
[백준_3190번] 뱀 (python) https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 내 풀이 import sys from collections import deque # input = sys.stdin.readline N = int(input()) # 맵크기 n*n K = int(input()) apple = [tuple(map(int, input().split())) for _ in range(K)] L = int(input()) moves = {} for i in range(L): ..
[백준_3191번] 백조의 호수 (python) https://www.acmicpc.net/problem/3197 3197번: 백조의 호수 입력의 첫째 줄에는 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1500. 다음 R개의 줄에는 각각 길이 C의 문자열이 하나씩 주어진다. '.'은 물 공간, 'X'는 빙판 공간, 'L'은 백조가 있는 공간으로 나타낸다. www.acmicpc.net 내풀이 -> 시간초과 import sys from collections import deque # input = sys.stdin.readline n, m = map(int, input().split()) MAP = [list(input().strip()) for _ in range(n)] p = [] for r in range(n): for c in range(m):..
[백준_1665번] 가운데를 말해요 (python) https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 첫 풀이 from collections import deque import sys # input = sys.stdin.readline n = int(input()) nums = deque([int(input()) for _ in range(n)]) sorted_nums = sorted(nums) length = len(sorted_nums) answers = [] while num..
[백준_12865번] 평범한 배낭 (python) https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 접근 처음에 모든 물건이 담기는 경우의 수를 조합을 통해서 구하려고 했으나 너무 계싼량이 많아질 것 같아서 다른 방법 생각. knapsack 알고리즘을 이용해서 풀이 내 풀이 N, K = map(int, input().split()) items = [list(map(int,input().split())) for _ in range(..
[백준_12100번] 2048 (python) https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 내풀이 from itertools import product import copy def up(BOARD): # x 0 -> 2 added = {} n = len(BOARD) for x in range(n): for y in range(n): nx, ny = x, y while nx - 1 >= 0 and BOARD[nx-1][y] == 0: nx -= 1 # 이동 B..
[백준_13460번] 구슬 탈출 2 (python) https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 내 풀이 n, m = map(int,input().split()) MAP = [] for _ in range(n): MAP.append(list(map(str,input()))) def move(x, y, dx, dy): cnt = 0 nx, ny = x, y while MAP[nx + dx][ny + dy] != '#' and MAP[nx][ny..