17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 처음에는 해당 문제를 collections 라이브러리의 deque 자료구조를 활용해서 풀었다. 알고리즘은 다음과 같다. 먼저 입력 받은 문자열을 리스트로 변환한다. (리스트로 변환하면 문자열의 각 문자가 원소로 리스트에 들어간다. 예를 들어, "abc" 문자열은 ['a', 'b', 'c']로 들어간다.) 만약 첫 번째 원소가 ''가 나올 때까지 문자를 합쳐준다. '>'가 나온 경우 탐색을 멈추고 태그 내용을 출력한다. 만약 첫 번째..
Algorithm
10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 파이썬 collections 라이브러리의 deque 자료구조를 활용하면 쉽게 구현할 수 있는 문제였다. 코드는 다음과 같다. import sys from collections import deque input = sys.stdin.readline n = int(input()) queue = deque() for _ in range(n): operation = input().rstrip() if operation == "size": print(len..
10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 단순히 문제의 요구대로 구현만 해주면 되는 문제였다. 단, 해당 문제는 First In First Out 구조인 큐를 구현하는 문제였기 때문에 collections 라이브러리의 deque를 활용했다. 코드는 다음과 같다. import sys from collections import deque input = sys.stdin.readline n = int(input()) queue = deque() for _ in range(n): operatio..
1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 처음에는 문제의 요구사항대로 그냥 구현만 해주면 된다고 생각했다. 즉, 커서라는 변수를 하나 선언하고 커서의 위치에 따라 L, D, B, P라는 명령어 각각을 올바르게 수행해주면 된다고 생각한 후 코드를 작성했다. import sys input = sys.stdin.readline ''' L: 커서를 왼쪽으로 한 칸 옮긴다 / 커서가 맨 앞이면 무시한다. D: 커서를 오른쪽으로 한 칸 옮긴다 / 커서가 문장의 맨 뒤면 무시한다. B: 커서 왼쪽에 있는 문자를 삭제..
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의 push와 pop 연산을 조합하여 1~n까지의 숫자를 원하는 수열의 형태로 뽑아내는 방법을 출력하는 문제다. 이때 push는 +, pop은 -로 출력한다. 예를 들어, 1~5로 만들 수 있는 수열 중 "4 3 5 2 1"을 만들고 싶다면 "push push push push pop pop push pop pop pop"을 수행하면 된다. 이를 +, -..
9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 해당 문제는 괄호가 올바르게 쳐져있는지를 확인하는 문제다. 이는 아래와 같은 원리로 코드를 작성할 수 있다. 괄호가 올바르게 나오는 경우는 '('와 ')'의 개수가 같은 경우다. 단, 개수가 같아도 )(의 경우 올바르지 않은 경우다. 따라서 우리는 수식이 올바른지 판단하기 위한 변수 하나를 선언할 것이다. 단, 초깃값이 0인 변수를 만들고 '('가 나온 경우는 +1, ')'가 나오는 경우는 -1을 더해주자. 해당 코드는 아래와 같이..
10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 기본적인 스택을 구현하는 문제였다. import sys input = sys.stdin.readline n = int(input()) stack = list() for i in range(n): operation = input().split() if operation[0] == "push": stack.append(operation[1]) elif operation[0] == "pop": if len(stack) == 0: print(-1) el..
우리는 ROCK이라는 단어를 찾고, 그 단어를 포함한 여러 단어에 대한 경우의 수를 구해햐 한다. 이를 위해서는 주어진 문자열을 처음부터 조사하는 것이 아니라 뒤에서부터 살펴봐야 한다. 이때 dp에는 발견한 K, CK, OCK, ROCK의 개수를 dp에 저장하기로 했다. 아래 코드에서 사용한 dp는 입력된 문자열의 길이 n만큼의 길이를 가지며 각 원소는 길이가 5인 리스트로 선언했다. 각 인덱스는 발견한 (0)K, (1)CK, (2)OCK, (3)ROCK의 개수를 저장하고 마지막 인덱스(4)의 칸에는 ROCK을 포함하고 있는 문자열의 개수를 저장했다. 단, ROCK을 포함하고 있는 문자열 중 "ROCK"은 인덱스(3)에 저장되어 있으므로 해당 문자열을 제외한 개수를 저장했다. 즉, "NROCK"이나 "R..