알고리즘 공부(C++)

백준 3986 좋은 단어

혀니리리 2022. 8. 27. 22:32
728x90

3986번: 좋은 단어 (acmicpc.net)

 

3986번: 좋은 단어

이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에

www.acmicpc.net

import sys
result = 0
N = int(input())
for i in range(N):
    stack = list(sys.stdin.readline().strip())
    temp = []
    for j in range(len(stack)):
        if len(temp) == 0:
            temp.append(stack[j])
        else:
            if temp[len(temp) - 1] == stack[j]:
                temp.pop()
            else:
                temp.append(stack[j])
    if len(temp) == 0:
        result += 1
print(result)

자료구조 문제이며 스택을 써야 하는 문제..

ABAB ABBA 이런식으로 되어있을때 BB처럼 연속해야 좋은단어라는 조건 = push pop이 이뤄져야 하겠구나라는 생각에 stack문제라는 것을 깨달았다.

우선, 문자열에서 한 문자씩 쪼개서 리스트에 넣고싶을땐

stack = list(input().strip()) 로하면 마지막 개행을 제외하고 리스트를 만들 수 있다.

import sys
n = int(sys.stdin.readline())
result = 0
for i in range(n):
    lst = list(sys.stdin.readline().rstrip())
    temp = []
    while lst:
        now = lst.pop()
        if not temp or temp[-1] != now:
            temp.append(now)
        else:
            temp.pop()
    if not temp: result += 1
print(result)

더 짧은 코드인데

if not temp 는 if len(temp) == 0과 같은 뜻임

if 조건을 무엇과 함께 묶는가를 통해서 코드가 더 짧아질 수 있으며

now = lst.pop()처럼 pop함과 동시에 그 요소를 이용할 수도 있음.

728x90

'알고리즘 공부(C++)' 카테고리의 다른 글

백준 11279 최대 힙  (0) 2022.08.28
백준 15650 N과 M(2) - 백트래킹문제  (0) 2022.08.28
백준 18258 큐2  (0) 2022.08.27
백준 1541 잃어버린 괄호  (0) 2022.08.27
4948 베르트랑 공준  (0) 2022.08.26