맥주파뤼~~ heap은 알콜이 낮은 순서로,. answer에는 prefer가 낮은대로 각각 두개의 heap을 사용했다. 입력된 값을 바로 heap에 넣어서 알콜도수가 낮은순대로 저장하고, 이들의 수가 n에 도달했을때, 만족도를 넘기지 못하면 answer의 값 중 가장 만족도가 낮은 것을 뺀다. 이때 만약 알콜이 가장 높은 것이면 두번째로 알콜값이 높은 값을 가장 높은 값으로 바꿔준다. 이걸 heap이 존재할때까지 반복하고, 없으면 -1를 출력하게 했다. 문제가 있었던 점은 second_alchol을 사용하지 않고, answer에서 반복문을 찾아서 maxalchol을 찾으려고 했더니 시간초과가 났다는 점이다. 시간초과가 난 코드 import heapq n,m,k=map(int,input().split())..
분류 전체보기
처음에는 시간을 계산해서 구해주려고 했다. 실패한 코드 from collections import deque n,w,l=map(int,input().split()) truck=list(map(int,input().split())) d=deque() s=0 time=0 for x in truck: if x+sl: y=d.popleft() s-=y if d: time+=1 s+=x d.append(x) if d: time+=w while d: d.popleft() time+=1 print(time) 이 경우 5 2 2 1 1 1 1 1과 같은 경우를 생각하지 못했다. 정답은 무지성 덱 시뮬레이션 이다. 덱으로 다리를 만들어서 직접 트럭을 이동시켜주었다. from collections import deque ..
이걸 풀면서 느낀게 파이썬은 정말 강력한 도구라는 것이다. 파이썬이 아니라면 이 문제 아마 1시간은 더 코딩했었어야 됐을 것이다. 1. 스택을 통해 괄호가 열고 닫히는 인덱스 쌍을 bracket에 저장한다. 2. bracket의 수만큼 combination을 수행해서 해당문자열을 만들어준다. 3. 그걸 res에 저장하고, 중복을 제거한후에 소팅해서 출력한다. from itertools import combinations s=list(input()) stack=[] bracket=[] res=[] for x in range(len(s)): if s[x]=='(': stack.append(x) elif s[x]==')': start=stack.pop() bracket.append((start,x)) for ..
간단해 보였지만 생각보다 생각할 것이 많았던 문제 무한 if else문으로 해결완료 import sys input=sys.stdin.readline n,p=map(int,input().split()) stack=[[] for _ in range(p+1)] cnt=0 for _ in range(n): a,b=map(int,input().split()) if stack[a]: if stack[a][-1]>b: x=0 while stack[a] and stack[a][-1]>=b: x=stack[a].pop() cnt+=1 if x==b: cnt-=1 stack[a].append(b) else: cnt+=1 stack[a].append(b) elif stack[a][-1]==b: continue else: s..
스택의 본질에 집중하자 이전값을 저장하고, 연산 후 다시 저장하고의 반복이다. 틀린코드 s=input() cur=0 stack=[] res=0 plus=0 for x in range(len(s)): if s[x]=="(": if x!=0: mul=int(s[x-1]) stack.append((plus-1,mul)) plus=0 elif s[x]==")": p,m=stack.pop() res=(res+plus)*m+p plus=0 else: plus+=1 print(res+plus) 이전의 결과값보다는 연산해야 하는 내용을 저장하려고 했고, 결론은 스택의 본질에 맞추지 못해서 꼬여버린 코드 s=input() cur=0 stack=[] for x in range(len(s)): if s[x]=="(": if..
·생각
이전 글과 더불어 이번 아이디어톤을 준비하며 의미와 가치에 대한 생각을 많이 했다. 이전 글을 정리하자면, 인간은 그저 태어나서 살다가 죽는다. 사실적, 객관적인 관점에서 바라봤을때, 인생에는 아무 의미도 없다. 그러나 이 사실을 인정하면, 살아갈 이유를 잃은 것이기에 모든 사람은 계속해서 살아갈 이유를 찾는다. 만들어진 이유는 사람에게 여러 "의미"로써 부여되어 사람을 앞으로 나아가게 한다. 의미의 전달 여기까지는 개인적 의미에 관한 이야기였고, 이번 글에서는 조금더 사회적인 부분에서 생각해보았다. 인간은 사회적 동물이므로, 생각을 나눌 수 있다. 즉, 의미를 나눌 수 있다. 물론 의미는 경험을 통해 직접 부딪히며 발견하는 것이 가장 좋지만, 의미를 전달 받고, 나눌 때에도 그 의미가 어느정도는 그 역..
생각보다 어려웠던 문제 결국은 풀긴했는데 매우 찝찝하게 풀었다. l=input() stack=[] res=0 tmp=1 for x in range(len(l)): if l[x]=="(": tmp*=2 stack.append(l[x]) elif l[x]=="[": tmp*=3 stack.append(l[x]) elif l[x]==")": if stack and stack.pop()=='(': if l[x-1]=='(': res+=tmp tmp=tmp//2 else: print("0") exit() elif l[x]=="]": if stack and stack.pop()=='[': if l[x-1]=='[': res+=tmp tmp=tmp//3 else: print("0") exit() if stack: p..
백트래킹을 이용한 문제 다른게 아니라 알파벳으로 방문표기를 하다보니 여간 어려운게 아니었다. vis를 26개의 배열로 설정해 ord를 사용, 알파벳마다 하나씩 칸을 설정해 방문표기했다. 나머지는 그냥 백트래킹으로 해결했다. import sys input=sys.stdin.readline def dfs(x,y,cnt): global M vis[ord(m[x][y])-65]=1 M=max(M,cnt) dx=[-1,1,0,0] dy=[0,0,-1,1] for i in range(4): X=x+dx[i] Y=y+dy[i] if 0
MST문제 PRIM을 사용했고, 그중 가장 큰 경로를 삭제해주면 두개의 마을(그래프)로 분할된다는 점을 이용했다. import heapq import sys input=sys.stdin.readline n,m=map(int,input().split()) route=[[] for _ in range(n+1)] vis=[0 for _ in range(n+1)] for _ in range(m): a,b,c=map(int,input().split()) route[a].append((c,b)) route[b].append((c,a)) cost=0 maxcost=0 heap=[(0,1)] cnt=0 while heap: if cnt==n: break nowcost,now=heapq.heappop(heap) if v..