문제https://www.acmicpc.net/problem/1182 풀이주어진 숫자 집합 S 중에서 순서에 관계없이 숫자 6개를 뽑는 문제이다.백트래킹으로 해결했다.def choose_num(start) : if len(selected_idx) == 6 : # 6개 숫자를 모두 뽑았으면 결과 출력 for idx in selected_idx : print(S[idx], end = ' ') print() for i in range(start, k) : # 순서 상관없이 겹치지 않게 뽑아야 하므로 start 지정 selected_idx.append(i) choose_num(i + 1) selected_idx.pop()while True : k, *S = m..
문제https://www.acmicpc.net/problem/13305 풀이첫 번째 시도앞으로 남은 도시들과 비교했을 때 현재 도시의 가격이 가장 저렴하면 남은 거리를 갈 수 있을만큼 최대로 채우고, 그게 아니라면 다음 도시까지 이동할 만큼만 채우자.ex. 도시의 주유소 가격 : 5 2 4 1첫 번째 도시(가격 5) : 다음 도시로 이동할 만큼만 채우기두 번째 도시(가격 2) : 남은 도시(마지막 도시 제외) 중 가장 저렴한 가격이므로, 마지막 도시까지 갈 수 있을만큼 채우기더보기import sysinput = sys.stdin.readlineN = int(input())length = list(map(int, input().split()))price = list(map(int, input().sp..
문제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) #..