목록알고리즘 (15)
Hyunwoo's DATA
https://www.acmicpc.net/problem/16198 16198번: 에너지 모으기 N개의 에너지 구슬이 일렬로 놓여져 있고, 에너지 구슬을 이용해서 에너지를 모으려고 한다. i번째 에너지 구슬의 무게는 Wi이고, 에너지를 모으는 방법은 다음과 같으며, 반복해서 사용할 수 있 www.acmicpc.net 기본적인 DFS 문제였다. N = int(input()) S = list(map(int,input().split())) ans=0 def solve(sum): global ans if len(S)==2: ans=max(ans,sum) return for i in range(1,len(S)-1): num=S[i] r=S[i-1]*S[i+1] del S[i] solve(sum+r) S.inser..
https://www.acmicpc.net/problem/15658 간단한 가지치기 재귀 문제였다. 계속 오답이 나길래 이유를 찾아보니 음수를 양수로 나눌 때는 C++14의 기준을 따른다. ->int(n/m)으로 풀어야만 했다. N = int(input()) S= list(map(int,input().split())) OP = list(map(int,input().split())) mn,mx=1000000000,-10000000 def solve(cnt,sum): global mn,mx if cnt==N-1: mx=max(sum,mx) mn=min(sum,mn) return for i in range(4): if OP[i]!=0: OP[i]-=1 if i==0: tmp=sum+S[cnt+1] solve(..
https://www.acmicpc.net/problem/14225 함수안에 0과 중복한 수를 제외하는 조건문을 넣었더니 시간초과가 떴다. 뭐가 더 경제적인지 생각하자 import sys N=int(sys.stdin.readline()) S=list(map(int, sys.stdin.readline().split())) k=[] def DFS(idx,sum): if idx==N: return sum=sum+S[idx] k.append(sum) DFS(idx+1,sum) sum=sum-S[idx] DFS(idx+1,sum) DFS(0,0) a=set(k) for i in range(1,2000000): if i not in a: print(i) break
ABC GFAK에서 A만 보면 A는 k*101을 가지는 수가 된다. 그렇기에 배열을 통해 각 자리수의 10*i 값을 계산해준뒤 가장 높은 수가 될수 있도록 9부터 (9-i)를 곱해준 값을 구한다. N= int(input()) Engs=[input() for _ in range(N)] s=[] Alphabet=[0 for _ in range(26)] for s in Engs: i=0 while s: now=s[-1] Alphabet[ord(now)-ord('A')]+= 10**i i+=1 s=s[:-1] Alphabet.sort(reverse=True) ans=0 for i in range(9,0,-1): ans+=i*Alphabet[9-i] print(ans) 참조:https://yoonsang-it.t..
https://www.acmicpc.net/problem/14889 from itertools import combinations N=int(input()) S=[list(map(int,input().split())) for i in range(N)] members=[i for i in range(N)] possible_team=[] for team in combinations(members,N//2): possible_team.append(team) min_gap=10000 # //2해서 절반만큼 돌리는 이유는 (1,3)과 (2,4)로 나오는 값은 같고 모든 경우가 2번 반복. for i in range(len(possible_team)//2): team=possible_team[i] stat_A=0 ..