목록자료구조 (42)
기록방
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/csYWRK/btrI4UCBK0I/6lZiYJb1QM9LCHdkAgGQTK/img.png)
👉 문제링크 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 🔸 문제 분석 🔸 괄호의 쌍을 확인하는 전형적인 스택 문제이다. 🔸 코드 🔸 T = int(input()) for i in range(T): S = input() arr = S[0] flag = False for j in S[1:]: if j == '(': arr += j else: if len(arr) == 0 or arr[-1] == ')': flag = True break else : arr = arr[:-1] i..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Okk30/btrI9ncV5pl/EJu1iUwqMuO58JXKJUmUx0/img.png)
👉 문제링크 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 🔸 문제 분석 🔸 카드 리스트에서 첫 번째 카드를 버리고, 가장 위로온 카드를 마지막으로 교체해 가며 마지막 1장을 출력한다. 🔸 코드 🔸 from collections import deque N = int(input()) arr = deque(range(1,N+1)) while len(arr) > 1: arr.popleft() arr.rotate(-1) print(arr[0]) 🔸 코드 해석 🔸 맨 앞 원소를 지우고, 전체 로테이션이 필요하므로 데..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Yui9f/btrI1OXjB5f/ktqvd1DR6x3WszWo63kHO0/img.png)
👉 문제링크 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 🔸 문제 분석 🔸 입력 값에 따라 요세푸스 순열을 구현한다. 원형으로 앉아있는 N명의 사람들 중 마지막 한 명이 남을 때까지 K번째 사람을 제거한다. 🔸 코드 🔸 N, K = map(int,input().split()) arr = list(range(1,N+1)) print("",sep="") 🔸 코드 해석 🔸 사람들의 인덱스를 기억하기 위해 1부터 N까지의 값을 리스트로 저장한다. 현재 index에서 K를 더한 위치의 사람을 제거한다. 더한 위치 값이 전체 길이를 초과하지 않도록 % 연산을 수행한다. 제거는 pop을 사용한다. 🔸 e..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lguZZ/btrItmtNgJU/mgMk7UaH48Tm61KJus7lwK/img.png)
👉 문제링크 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 🔸 문제 분석 🔸 스택을 구현한다. 시간 제한이 0.5로 짧다. 🔸 코드 🔸 import sys input = sys.stdin.readline print = sys.stdout.write N = int(input().strip()) arr = [] for i in range(N): order = input().strip() if order[:4] == "push": arr.append(int(order[5:])) elif order..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/WRpyE/btrHPORwaNu/mlgoRW3RRQ6dG5mZ1wvdP0/img.png)
👉 문제링크 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 🔸 문제 분석 🔸 입력된 한 줄의 문장을 뒤집어 출력하는 문제이다. 기호로 감싸진 부분은 '태그'이며 뒤집지 않는다. 공백을 구분해 한 단어씩 뒤집는다. 🔸 코드 🔸 import sys str = sys.stdin.readline().rstrip() tag = False answer = "" temp = "" for c in str : if c == '': tag = False answer += c elif c == '..