목록Python (25)
해야만 한다
https://www.acmicpc.net/problem/17144 풀이 클리너의 위치를 저장하고(반드시 0열이므로 행만 찾으면 된다) 확산, 클리닝 함수를 작성해서 모든 방향 for문으로 index 조절해서 이동시키고 확산시켰다. 주의점은 먼지가 확산하는 과정에서 각 위치에서의 먼지의 양이 달라지므로 먼지들의 좌표를 저장할 때 확산시킬 먼지의 양을 같이 저장해두어야 한다는 점 코드 import sys input = sys.stdin.readline r,c,t = map(int, input().split()) arr = [list(map(int, input().split())) for _ in range(r)] cleaner = [] for i in range(r): if arr[i][0] == -1: ..
https://www.acmicpc.net/problem/15686 풀이 집과 치킨집의 좌표를 저장해두고 치킨집 m개로 만들 수 있는 조합을 활용하여 치킨 거리가 최소가 되는 조합을 구한다. 코드 from itertools import combinations import sys input = sys.stdin.readline n, m = map(int, input().split()) arr = [list(map(int, input().split())) for _ in range(n)] house = [] chick = [] for i in range(n): for j in range(n): # 집이면 if arr[i][j] == 1: # 좌표를 저장한다 house.append((i,j)) elif arr..
https://www.acmicpc.net/problem/12919 풀이 목표 문자열 안에 내 문자열을 변환한 값이 포함되어 있으면 재귀하여 목표를 찾는 문제 2번째 행위에는 문자열을 뒤집는다는 개념이 있으므로 타겟을 뒤집은 문자열과도 비교를 해야했다. 코드 s = input() t = input() check = 0 def sol(a): global check if a == t: check = 1 return if len(a) > len(t): return if a + 'A' in t or a + 'A' in t[::-1]: sol(a+'A') if 'B' + a[::-1] in t or 'B' + a[::-1] in t[::-1]: sol('B' + a[::-1]) sol(s) print(check)
https://www.acmicpc.net/problem/1715 풀이 힙큐를 이용하여 최소 2개를 pop(heappop)하고 그 값을 누적하면서 힙큐에 다시 넣는다. 코드 import heapq, sys input = sys.stdin.readline n = int(input()) if n == 1: print(0) exit() pq = [] for i in range(n): heapq.heappush(pq,int(input())) res = 0 while len(pq) >= 2: temp = 0 temp += heapq.heappop(pq) temp += heapq.heappop(pq) res += temp heapq.heappush(pq, temp) print(res)
https://www.acmicpc.net/problem/1103 풀이 델타탐색 값에다가 탐색할 곳에 있는 숫자만큼 곱해줘서 탐색 영역을 설정하고 조건문을 통해 retire 되는 케이스를 continue로 넘기고 이동 횟수를 갱신해주면서 bfs 탐색을 한다. 탐색했던 자리를 다시 탐색하는 case가 나온다면 무한 루프에 빠진 것이다. n*m 배열에서 이동횟수가 n*m을 넘어간다는 건 어딘가 2번 이상 방문했다는 의미이므로 -1을 출력하고 종료한다. 코드 import sys from collections import deque input = sys.stdin.readline n, m = map(int, input().split()) board = [list(input().rstrip()) for _ in ..
https://www.acmicpc.net/problem/16953 풀이 bfs를 활용하여 풀었다. 코드 from collections import deque def bfs(): q = deque() q.append((a,0)) while q: v, cnt = q.popleft() if v == b: return cnt+1 if v*2
https://www.acmicpc.net/problem/1238 문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다. 각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000), M(..
https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 풀이 값이 다른 것을 발견하면 (를 열고 4등분 재귀한다. 재귀를 마치고 나서 ) 닫아준다. 코드 import sys input = sys.stdin.readline n = int(input()) arr = [list(input()) for _ in range(n)] result = [] str_ = '' def search(x,y,n): global str_ zip_ = arr[x]..