문제풀기/백준(12)
-
백준 7576번 : 토마토
https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 아이디어 단순 BFS이다. 하지만 deque를 사용하면 시간초과가 나기 때문에, day를 제일 첫 번째 원소로 가지고 있는 heapq를 사용해야한다. import sys import heapq input = sys.stdin.readline m,n = map(int, input().rstrip().split()) maps = [] queue = [] visited = [[0 for..
2021.10.05 -
백준 20436 : ZOAC 3
https://www.acmicpc.net/problem/20436 20436번: ZOAC 3 첫 번째 줄에는 두 알파벳 소문자 sL, sR이 주어진다. sL, sR은 각각 왼손 검지손가락, 오른손 검지손가락의 처음 위치이다. 그 다음 줄에는 알파벳 소문자로 구성된 문자열이 주어진다. 문자열의 www.acmicpc.net 매번 느끼는거지만 문제를 잘 읽자... 오른손은 한글의 모음 부분만, 왼손은 한글의 자음 부분만 가능하다는 조건을 빼놓아서 괜히 어렵게 풀었다. 그냥 단순하게 구현만 하면 되는 문제 import sys input = sys.stdin.readline l,r = input().rstrip().split() want_str = list(input().rstrip()) keyboard_lis..
2021.10.05 -
백준 21611번 : 마법사 상어와 블리자드
https://www.acmicpc.net/problem/21611 21611번: 마법사 상어와 블리자드 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그, 비바라기 마법을 할 수 있다. 오늘 새로 배운 마법은 블리자드이고, 크기가 N×N인 격자에서 연습하려고 한다. N은 항상 홀수이고, ( www.acmicpc.net 복잡한 구현문제이다. 전체적인 구조는 1시간정도 걸려서 구현했는데, 구슬폭파 부분에서 시간이 많이 걸렸다. 차례대로 구슬 폭파를 하지 않고, 한꺼번에 해야하는데 차례대로 구슬폭파를 하는 식으로 구현해서 몇 시간이나 낭비했다. 아이디어 먼저 N*N 크기의 맵의 각 자리에 숫자를 부여한 뒤, 이를 참고해서 1번 자리에 있는 숫자부터 N*N-1번 자리에 있는 숫자까지 maps 배열에 ..
2021.10.05 -
백준 1987번 (골드 4) : 알파벳
https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net - 기본적인 생각은 처음부터 옳았으나, queue에 들어가는 아이들 중에서 중복이 있을 수 있다는 것을 전혀 생각하지 못하고 계속해서 deque를 이용해서 queue를 구현해서 사용했다. - 이 때문에 계속 시간 초과가 났고, 결국 set을 이용해서 queue를 구현하자 중복이 제거되어서 시간 초과가 해소되었다. import sys r,c = map(int, sys.stdin.readlin..
2021.08.09 -
백준 1260번 (실버 2) : DFS와 BFS
https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net - 단순히 BFS, DFS를 구현할 수 있으면 된다. - 중요한 것은 간선이 여러개면 작은 정점부터 방문하기 때문에, DFS, BFS를 실행하기 전에 sort를 한번 해줘야 한다는 점이다. import sys from collections import deque n,m,v = map(int, sys.stdin.readline().rstrip().split())..
2021.08.09 -
백준 1463번 (실버 3) : 1로 만들기
https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net import sys n = int(sys.stdin.readline().rstrip()) lists = [0]*(n+1) answer = 0 for i in range(1,n+1): if i*3 lists[i]+1): lists[i*3] = lists[i] + 1 if i*2 lists[i]+1): lists[i*2] = lists[i] + 1 if i+1 lists[i]+1): lists[i+1] = lists[i] + 1 print(lists[n]) - 0부터 n까지의 인덱스를 가지고 있는 lists를 만든..
2021.08.09