문제https://www.acmicpc.net/problem/1049 풀이N개 이상의 기타줄을 구매하는데 필요한 최소 가격을 구하는 문제이다.기타줄을 구매하는데 있어서 가능한 경우들은 다음과 같다.패키지와 낱개를 섞어서 구매하는 경우패키지만 구매하는 경우낱개만 구매하는 경우N, M = map(int, input().split())cost = []for _ in range(M) : six, one = map(int, input().split()) cost.append([six, one])answer = [] # 정답 후보 저장pack = N // 6each = N % 6cost_pack = sorted(cost, key = lambda x : x[0]) # 패키지 가격 기준 오름차순으로 정렬cost..
문제https://www.acmicpc.net/problem/2470 풀이두 용액을 섞어서 특성값이 0에 가장 가까운 용액을 만들어내는 문제이다.우선 입력받은 용액의 특성값들을 오름차순으로 정렬한 후, 투 포인터를 사용해 풀이했다.산성 용액 또는 알칼리성 용액만으로 이루어진 입력이 들어오는 경우절댓값이 가장 작은 값 2개를 더할때 특성값이 0에 가장 가까운 용액이 만들어진다.산성, 알칼리성 용액이 모두 포함된 입력이 들어오는 경우양쪽 끝의 용액들을 더하는 것으로 시작해서, 인덱스를 하나씩 옮겨가며 특성값의 합을 계속 비교한다.특성값의 합이 0보다 작다면, 더 큰 수를 더해야 한다는 뜻이므로 왼쪽 인덱스를 하나 증가시킨다.특성값의 합이 0보다 크다면, 더 작은 수를 더해야 한다는 뜻이므로 오른쪽 인덱스를 ..
문제https://www.acmicpc.net/problem/13241 풀이두 수 a와 b의 최소공배수는 a와 b의 곱을 a와 b의 최대공약수로 나눈 것과 같다.LCM(a, b) = (a * b) / GCD(a, b)이때 a와 b의 최대공약수를 구하는 함수는 유클리드 호제법을 사용하여 구현하였다. 유클리드 호제법 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란ko.wikipedia.orgA, B = map(int, input().split())def GCD(a, b) : if a
문제https://www.acmicpc.net/problem/14246 풀이투 포인터를 적용해서 풀었다.left와 right 모두 0에서 시작해 특정 조건을 만족하면 인덱스를 하나씩 늘려갔다.이때 주어진 값들은 모두 자연수이므로, 만약 left ~ right의 구간합이 k보다 크다면 right 이후의 모든 구간 또한 k보다 큰 구간합을 갖는다.ex. [1 2 3 1] 에서 4 이상의 구간합을 찾는 경우, [1 2 3]의 합이 4보다 크므로 [1 2 3 1]의 구간합 또한 4보다 크게 된다.n = int(input())nums = list(map(int, input().split()))k = int(input())left, right = 0, 0sum = 0count = 0while (lef..
문제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..