CodingTest/Baekjoon

[baekjoon] 백준 1316번(파이썬): 그룹 단어 체커

JunJangE 2021. 12. 20. 00:50

문제

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

알고리즘

- 반복문을 통해 단어를 확인한다.

- 반복문을 통해 각 단어들의 문자를 확인한다.

- 현재 비교하고 있는 문자와 다음 문자들을 확인하면서 그룹 단어의 유무를 판단한다.

코드

import sys


n = int(sys.stdin.readline())
cnt = 0

# 반복문을 통해 단어를 확인
for _ in range(n):
    word = list(map(str, sys.stdin.readline().strip()))
    stack = [word[0]] # 스택을 이용하여 문제를 수행
    flag = True # 그룹 단어의 유무

    # 반복문을 통해 스택에 있는 문자와 비교하는 문자를 확인
    for i in range(1, len(word)):

        # 스택에 담겨있는 문자가 현재 비교하고 있는 문자와 다르고 스택에 현재 비교하고 있는 문자가 있다면
        # 그룹 단어가 될 수 없다.
        if stack[i - 1] != word[i]:
            if word[i] in stack:
                flag = False
                break
        # 스택에 현재 비교한 문자를 추가한다.
        stack.append(word[i])

    # 그룹 단어의 유무에 따라 카운트
    if flag:
        cnt += 1

print(cnt)

 

다른 사람의 성공 코드

import sys

n = int(sys.stdin.readline())

cnt = n

# 반복문을 통해 단어를 확인
for _ in range(n):
    word = list(map(str, sys.stdin.readline().strip()))
    
    # 반복문을 통해 현재 문자와 다음 문자를 비교
    for i in range(len(word) - 1):
        
        # 현재 문자와 다음 문자가 같으면 패스
        if word[i] == word[i + 1]:
            pass
        # 현재 문자가 다음 문자중에 있으면 그룹 단어가 될 수 없다.
        elif word[i] in word[i + 1:]:
            cnt -= 1
            break

print(cnt)

다른 사람의 성공 코드와 나의 코드를 비교했을 때 시간과 메모리는 같았지만 코드 길이가 달랐다. 다른 사람의 성공 코드가 더 직관적이라 이해하기 더 쉬울 것 같다.

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com