파이썬

    12731 백준 파이썬

    12731 백준 파이썬

    각각 역에 대한 출발시간을 heap에 저장한다. 각 역은 save라는 heap을 가지며, 해당 heap보다 출발시간의 heap이 큰 경우, count가 커지지 않는다. 해당 heap의 출발시간이 save보다 작은경우, count는 커진다. heap에서 꺼낸 시간의 도착시간에 회차시간을 더한뒤에 상대편 역의 save에 push 한다. 코드가 매우 더럽다. 내일중으로 정리해서 업데이트 할 예정 import heapq from collections import deque from tracemalloc import start def function_a(a,acount,asave,bsave): now_a=heapq.heappop(a) start_hour,start_minutes=now_a[0].split(":")..

    3078 백준 파이썬

    3078 백준 파이썬

    윈도우를 덱으로 구성해주었다. 윈도우 크기가 k+1미만이면 윈도우에 append하고, 이름길이 배열의 갯수를 더해준다. 윈도우 크기가 k+1(k등 이상 차이이므로)나게 되면 popleft하여, 해당 값의 이름 길이 배열의 갯수에서 빼준다. 마지막에는 window에는 k+1이하의 길이를 가진 값들이 남게 되는데 이 값들을 동일하게 큐느낌으로 처리해주었다. import sys input=sys.stdin.readline from collections import deque n,k=map(int,input().split()) count=[0 for x in range(21)] name=[] window=deque() ans=0 for x in range(n): name.append([x+1,len(input(..

    17503 백준 파이썬

    17503 백준 파이썬

    맥주파뤼~~ heap은 알콜이 낮은 순서로,. answer에는 prefer가 낮은대로 각각 두개의 heap을 사용했다. 입력된 값을 바로 heap에 넣어서 알콜도수가 낮은순대로 저장하고, 이들의 수가 n에 도달했을때, 만족도를 넘기지 못하면 answer의 값 중 가장 만족도가 낮은 것을 뺀다. 이때 만약 알콜이 가장 높은 것이면 두번째로 알콜값이 높은 값을 가장 높은 값으로 바꿔준다. 이걸 heap이 존재할때까지 반복하고, 없으면 -1를 출력하게 했다. 문제가 있었던 점은 second_alchol을 사용하지 않고, answer에서 반복문을 찾아서 maxalchol을 찾으려고 했더니 시간초과가 났다는 점이다. 시간초과가 난 코드 import heapq n,m,k=map(int,input().split())..

    13335 백준 파이썬

    13335 백준 파이썬

    처음에는 시간을 계산해서 구해주려고 했다. 실패한 코드 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 ..

    2800 백준 파이썬

    2800 백준 파이썬

    이걸 풀면서 느낀게 파이썬은 정말 강력한 도구라는 것이다. 파이썬이 아니라면 이 문제 아마 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 ..

    2841 백준 파이썬

    2841 백준 파이썬

    간단해 보였지만 생각보다 생각할 것이 많았던 문제 무한 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..

    1662 백준 파이썬

    1662 백준 파이썬

    스택의 본질에 집중하자 이전값을 저장하고, 연산 후 다시 저장하고의 반복이다. 틀린코드 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..

    2504 백준 파이썬

    2504 백준 파이썬

    생각보다 어려웠던 문제 결국은 풀긴했는데 매우 찝찝하게 풀었다. 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..