목록algorithm/baekjoon (96)
하루일문
문제 13417번: 카드 문자열 입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 T가 주어진다. 각각의 테스트 케이스의 첫째 줄에 처 www.acmicpc.net 코드 import sys input = sys.stdin.readline from collections import deque for _ in range(int(input())): num = int(input()) card = list(map(str, input().strip().split())) word = deque([card[0]]) for i in card[1:]: if i > word[0]: word.append(i) else: word.append..
문제 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 포인트 문제 자체는 크게 어려운 문제가 아니나, 별 생각없이 3중 for문이 되버리면 시간이 빡빡해 파이썬으로 풀기에는 시간초과가 나와 다소 어려울 수 있다. 이럴 경우 pypy3에선 맞을테니 제출 방법을 바꿔보아도 좋다. 코드 python import sys input = sys.stdin.readline N, M, B = map(int, input().split()) graph = {} for _ in range(N): for i in list(map(..
문제 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 코드 combinatiuons from itertools import permutations, combinations import sys input = sys.stdin.readline N = int(input()) graph = [list(map(int, input().split())) for _ in range(N)] # p = permutations(range(0, N), N//2) p = list(combinations(range(N), N//2)) # print(list..
문제 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 코드 N, K = map(int, input().split()) coin = [int(input()) for _ in range(N)] cnt = 0 for i in range(N - 1, -1, -1): if K // coin[i] > 0: cnt += K // coin[i] K = K % coin[i] if K == 0: break print(cnt) 해설 가장 큰 수부터 하나하나 넣는 방식..
문제 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 코드 import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline from collections import deque def BFS(visited, S, G): global U, D queue = deque([S]) visited[S] = 0 while queue: now = queue.popleft() if now == G: return visited[now] for i in [U, -D]: next = n..
문제 1914번: 하노이 탑 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 코드 def hanoi(n, start, goal, side): # 1일 경우(가장 작다) 골로 보내줘 if n == 1: return print(start, goal) # 아니라면 n-1하면주고 goal, side 위치를 바꿔줘 # 짝 = goal, side 위치 변경 hanoi(n-1, start, side, goal) # 재귀하고 나오면(작은 수가 빠졌다.) 움직일 수 있다 # 1일 경우와 다른 축에 넣어줘야함 print(start, goal) hano..
문제 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 코드 dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline def DFS(graph, visited, i, j): visited[i][j] = 1 for _ in range(4): nx = i + dx[_] ny = j + dy[_] if 0
문제 1743번: 음식물 피하기 첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다 www.acmicpc.net 코드 BFS import sys from collections import deque input = sys.stdin.readline dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] def BFS(graph, visitied, x, y): global cnt queue = deque([(x, y)]) cnt += 1 visitied[x][y] = cnt while queue: n, m = queu..