문제https://www.acmicpc.net/problem/2583 풀이dfs를 사용해 풀이했다.import syssys.setrecursionlimit(10**6)M, N, K = map(int, input().split())maps = [[0 for _ in range(N)] for _ in range(M)]# 직사각형이 그려진 부분을 -1로 표시한다.for _ in range(K) : x1, y1, x2, y2 = map(int, input().split()) for i in range(x1, x2) : for j in range(y1, y2) : maps[j][i] = -1# 한 영역의 넓이를 구하기 위한 dfs 함수def dfs(x, y) : global count # 한..
문제https://www.acmicpc.net/problem/10610 풀이우선 주어진 숫자들의 조합으로 30의 배수를 만들 수 있는지를 판단해야 한다. 배수 판정법 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 배수 판정법은 배수인지 확인하려는 수의 배수가 맞는지 간단히 확인하는 절차이다. 일반적으로 정수 m , n {\displaystyle m,n} 에 대해 m {\displaystyle m} 이 n {\displaystyko.wikipedia.org30의 배수는 3의 배수이면서 일의 자리가 0인 수이고, 3의 배수는 각 자리 수의 합이 3의 배수인 수이므로주어진 숫자에 '0'이 포함되고, 각 자리 수의 합이 3의 배수가 된다면 주어진 숫자들의 조합으로 30의 배수를 만들 수 있..
문제https://www.acmicpc.net/problem/9613 풀이GCD : 최대공약수# 두 수의 최대공약수 구하는 함수def GCD(n1, n2) : rem = 1 while (rem != 0) : rem = n1 % n2 # n2로 나누어 떨어지면, n2가 곧 최대공약수 n1 = n2 n2 = rem return n1 # n1 = n2 처리했기 때문t = int(input())for _ in range(t) : n, *nums = map(int, input().split()) answer = 0 for i in range(n-1) : for j in range(i+1, n) : answer += GCD(nums[i], nums[j]) # 가능한 쌍..
문제https://www.acmicpc.net/problem/1715 풀이최소한의 비교를 하기 위해서는, 항상 가장 작은 카드 묶음 2개씩을 비교해야 한다.그렇기 때문에 최소 힙을 이용하여 구현하였다.import heapqN = int(input())card = []for _ in range(N) : heapq.heappush(card, int(input()))if N == 1 : # 카드 묶음이 1개라면 비교할 필요 없음 print(0)else : answer = 0 while True : if len(card) == 1 : break n1 = heapq.heappop(card) n2 = heapq.heappop(card) answer += (n1 + n2) #..
문제https://www.acmicpc.net/problem/10026 풀이구역의 개수를 구하는 알고리즘은 적록색약 여부와 무관하게 dfs로 구현할 수 있다.import syssys.setrecursionlimit(10**6)N = int(input())picture = []for _ in range(N) : picture.append(list(input()))dx = [-1, 1, 0, 0]dy = [0, 0, -1, 1]def dfs(x, y, c) : # c : 색깔(R, G, B) visited[x][y] = 1 # 방문처리 for i in range(4) : nx = x + dx[i] ny = y + dy[i] if (0
문제https://www.acmicpc.net/problem/2468 풀이높이가 h이하인 지점을 모두 잠기게 만드는 비가 내린다고 했을 때, 물에 잠기지 않는 안전한 영역의 개수를 구하면 되는 문제이다.비가 오지 않는 경우도 있을 수 있으므로 h = 0, 1, ..., (지역의 최대 높이 - 1) 에 대해 안전 영역의 개수를 모두 구하고, 그 중 최댓값을 구하면 답이 된다.import syssys.setrecursionlimit(10**6)N = int(input())maps = []max_h = 0 # 지역의 최대 높이 저장for _ in range(N) : temp = list(map(int, input().split())) maps.append(temp) max_h = max(max_h, m..