백준 문제풀이/자료구조 9

[백준] 9935 문자열 폭발 - python

9935번: 문자열 폭발 (acmicpc.net) 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 우리 조원이 강력추천한 문제다. stack + 노가다로 풀었다 교수님이 푼 코드 보니까 훨 짧던데, 난 아직 모자르니까 ! 그래도 풀어서 뿌듯 ~ stack = [] txt = list(input()) txt_s = list(input()) h = len(txt_s) for i in range(len(txt)): # txt_s의 길이보다 stack이 작으면 계속 쌓기 if len(stack) < h..

[백준] 2493 탑 - python

https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 골드인데 할만해보여서 덤볐다가 교수님과 2시간 잡고 있었다. 무지랭이를 도와주시려고 계속 옆에서 알려주신 교수님께 이영광을 내가(교수님의도움을받아^^) 푼 코드 num = int(input()) li = list(map(int,input().split())) temp = [] ans =[] for j in range(len(li)): # 첫번째 숫자는 무조건 0 flag = True for i ..

[백준] 1874 스택수열 - python

https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 도대체 뭔소린지 . . 이틀 고민함 입력과 출력이 왜저런지는 알겠다. 근데 이렇게 구현되는 코드를 짜는 건 어케하는지 모르겠다. 그래서 그냥 구글에서 찾아봤다. stack은 오름차순으로 쌓인다는 성질을 이용하면 은근 쉬운 문제였음 n = int(input()) stack, ans, find = [], [], True..

[백준] 9012 괄호 -python

https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 내가 처음에 짠 코드 n = int(input()) for i in range(n): x = list(input()) l_cnt = 0 r_cnt = 0 for i in range(len(x)): if x[i] == '(': l_cnt += 1 else : r_cnt += 1 if l_cnt == r_cnt : if x[-1] == ')': print('YES') e..

[백준] 10828 스택 -python

https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net input() 썻다가 시간초과에 걸렸던 것 같다 ( 어제푼건데 그새 까먹은 ) 이미 큐를 겪어서 그런가 금방 풀었다! import sys num = int(input()) temp = [] for i in range(num): com = sys.stdin.readline().split() if com[0] == 'push': temp.append(com[-1]) elif com[..

[백준] 2164 카드2 -python

https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net deque를 활용하면 쉽게 풀 수 있음 ! from collections import deque num = int(input()) temp = deque([]) for i in range(num) : temp.append(i+1) while len(temp) > 1: temp.popleft() pops = temp.popleft() temp.append(pops) print(temp[0])

[백준] 1158 요세푸스 문제 - python

https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net pop하면서 동시에 append가 되는지 몰랐음 그래서 pop하고 그 다음줄에 append하고 . . 이런 바보짓의 연속이였다. 구상까지는 했는데, total의 길이를 넘어갔을 때, total의 길이가 줄었을 때 어떡하지~~ 하다가 그냥 나누고 나머지만큼만 가면 된다는 것을 알아챔 join을 잘 활용하자. 인덱스를 따로 만들면 되는데 바보같이 i += num -1 하다가 . . 이러면 안되는데? 계속 이런 반복이였다. 나는 밥오 total, num= map(int,input().split..

[백준] 18258 큐2 - python

https://www.acmicpc.net/problem/18258 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 앞에 큐문제랑 똑같은줄 알았는데, 무한 시간초과의 늪에 걸려버렸다 . . 원인 1. .split()이 매번 실행되서 -> .split()말고 어떻게 분리를 한단말임 ?? 원인 2. .pop(0) -> pop은 뒤에서 앞으로 하나하나 건너가기 때문에 얘때문도 있음 leftpop()을 쓰면 알아서 젤 왼쪽 값을 없애준다 !! 그리고 큐 문제를 풀때는 deque를 사용할 것 -..

[백준] 10845 큐 - python

https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 처음에 input() 썻다가 시간초과 걸려서 sys.stdin.readline()으로 바꿨더니 해결완 import sys num = int(sys.stdin.readline()) que =[] for i in range(num): txt = sys.stdin.readline().split() if txt[0] =='push': que.append(txt[1]) elif txt[0]..