Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

No Limitation

[코딩테스트 준비] - 문자열 / 스택 문제 풀이 본문

프로그래밍

[코딩테스트 준비] - 문자열 / 스택 문제 풀이

yesungcho 2024. 2. 28. 20:58

 

https://www.acmicpc.net/problem/2908

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net

A, B = [x for x in input().split()]
A = [k for k in A]; B = [k for k in B]
A.reverse(); B.reverse()
A = ''.join(A); B = ''.join(B)
if int(A) > int(B) :
    print(int(A))
else :
    print(int(B))

 

https://www.acmicpc.net/problem/2675

 

2675번: 문자열 반복

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다

www.acmicpc.net

T = int(input())

for _ in range(T) :
    answer = ''
    R, S = [x for x in input().split()]; R = int(R)
    for i in S :
        answer += i*R
    print(answer)

### *로 중복된 문자열 뿔릴 수 있는거 잊지말자

### 아래 코드는 다른 유저 분의 코드로 더 간결해서 참고될거 같아 가져옴

n = int(input())

for _ in range(n):
    cnt, word = input().split()
    for x in word:
        print(x*int(cnt), end='')  # end='' 옆으로 붙임
    print()  # 줄넘김

 

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

### 스택의 대표유형이니 만큼 잘 숙지하자

import sys
N = int(sys.stdin.readline())

for _ in range(N) :
    paranthesis = sys.stdin.readline()
    stack = []
    for now in paranthesis :
        if now == '(' :
            stack.append(now)
        elif now == ')' :
            if stack :
                if stack[-1] == '(' :
                    stack.pop()
                else :
                    stack.append(now)
            else :
                stack.append(now)

    if len(stack) == 0 :
        print('YES')
    else :
        print('NO')

 

https://www.acmicpc.net/problem/12789

 

12789번: 도키도키 간식드리미

인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두

www.acmicpc.net

### 나는 스택이랑 큐를 같이 사용했는데 다른 방법은 없을 지...
### main() 함수를 쓰는 방법 말고는 저 return을 처리할 다른 방법은 없을까..

import sys
import collections
N = int(sys.stdin.readline())

student = [int(x) for x in sys.stdin.readline().split()]

def main(student) :
    queue = collections.deque(student)
    stack = []

    while queue :
        if stack :
            minimum = min(min(queue),min(stack))
            if stack[-1] == minimum :
                stack.pop()
            else :
                now = queue.popleft()
                if now != minimum :
                    stack.append(now)
        else :
            minimum = min(queue)
            now = queue.popleft()
            if now != minimum :
                stack.append(now)
            
    if stack :
        while stack :
            if stack[-1] == min(stack) :
                stack.pop()
            else :
                print("Sad")
                return

        print("Nice")
    else :
        print("Nice")

main(student)

 

https://www.acmicpc.net/problem/28278

 

28278번: 스택 2

첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다. 출력을 요구하는 명령은 하나 이상 주어진다.

www.acmicpc.net

### 여기서 배운 거, if stack == [] 이런 표현 쓰지 말고, if stack 이렇게 가자

### 그리고 추가로 입력 처리하는 거 저렇게 하지 말고
### sys.stdin.readline() 이거에 익숙해지자

import sys

N = int(sys.stdin.readline())
stack = []

for _ in range(N) :
    inputs = sys.stdin.readline().split()
    
    if inputs[0] == '1' :
        stack.append(inputs[1])

    elif inputs[0] == '2' :
        if stack  :
            print(stack.pop())
        else :
            print(-1)

    elif inputs[0]  == '3' :
        print(len(stack))

    elif inputs[0] == '4' :
        if stack :
            print(0)
        else :
            print(1)

    else :
        if stack :
            print(stack[-1])

        else :
            print(-1)