해당 문제는 큐를 사용해서 해결할 수 있다.큐를 사용하면 카드의 순서대로 제거하고, 제거 후 남은 카드 중 첫 번째 카드를 맨 뒤로 옮기는 동작을 쉽게 구현할 수 있게 된다. 파이썬에서는 collections.deque를 사용하여 큐를 효율적으로 구현할 수 있음! from collections import dequedef card_game(N): # 1부터 N까지의 카드 번호를 덱에 추가 cards = deque(range(1, N + 1)) discarded = [] # 카드가 한 장 남을 때까지 반복 while len(cards) > 1: # 제일 위의 카드를 버림 discarded.append(cards.popleft()) # 제일 위..
Python
dfs 깊이 우선 탐색으로 풀 수 있었던 문제이다.저번에 썼던 코드 그대로 사용하면 될 줄 알았는데 결과는 제대로 출력이 되지만 막상 백준에 제출했을 때에는 런타임에러가 계속 발생해서 예외처리를 한 뒤에야 통과되었음 런타임 에러 이유는 NZEC 에러라고 해서 try except 문으로 예외 처리를 해주었는데, 솔직히 이걸 안했을때 왜 통과가 안되는 지에 대한 정확한 이유는 잘 모르겠다.. import sysinput = sys.stdin.readclass Node: def __init__(self, value): self.data = valueclass Graph: def __init__(self): self.graph = {} self.visit = []..
자료구조 수업때 배운 dfs와 bfs 알고리즘으로 쉽게 풀 수 있었던 문제! class Node: def __init__(self, value): self.data = valueclass Graph: def __init__(self): self.graph = {} self.visit = [] self.queue = [] def create(self, v, data): # 인접리스트 graph[v]에 data추가 node = Node(data) if v not in self.graph: self.graph[v] = [] self.graph[v].append(node) de..
처음에 문제 설명만 읽고 바로 이해하기엔 조금 시간이 걸렸던 문제인데,스택을 어떤 용도로, 몇 개를 생성하여 적절하게 활용하는 지가 중요했던 것 같다. 예시를 통해 이해하는 것이 가장 빠르므로, 첫 번째 예시로 설명해보겠다. 첫 번째 줄에는 이후 입력될 정수들의 수인 N이 입력되고 두 번째줄부터 숫자 입력이 시작된다. 4 // [1, 2, 3, 4]3 // [1, 2, 3]6 // [1, 2, 5, 6]8 // [1, 2, 5, 7, 8] 스택에 push하는 순서는 오름차순이며, 처음에 4를 입력 받았으니 1부터 4까지 차례로 먼저 스택에 삽입한다.stack : [1, 2, 3, 4]operator : [+, +, +, +]이후 입력된 수열 4을 만들수 있으므로 4를 출력하기 위해 pop(-)을 한다...
N = int(input())lst = []for i in range(N): num = int(input()) if num == 0: lst.pop() else: lst.append(num)print(sum(lst)) 매우 쉬운 문제.첫 번째 줄에 입력받은 숫자의 횟수 만큼 두 번째 줄부터 입력 받은 숫자들이 리스트에 저장되도록 하였다.그 후 N번만큼 반복되는 for문에서 숫자 num을 입력받고,num이 0이면 가장 마지막에 저장된 숫자를 지워야 하므로 스택에서 pop(),num이 0이 아니면 num을 스택에 저장해준다.마지막으로 sum() 함수로 리스트의 합계를 출력해주면 끝!
이 문제에서도 좌측 상단에 시간 제한 2초가 눈에 띤다.앞서 배웠던 sys 모듈로 한꺼번에 N+M개의 줄을 입력 받은 후에 for 문으로 처리해야 할 것이다. 첫 번째 코드import sysinput = sys.stdin.readword = input().splitlines()N, M = map(int, word[0].split())S = word[1:N+1]mlst = word[N+1 : N+1+M]num = 0for i in range(M): temp = mlst[i] for j in range(M): if S[j] in temp : num+=1print(num)이건 시도했었던 첫 번째 코드인데, 아래 for문에서 indexerror로 실패했던 코드이다. ..