BOJ / Implementation / 그룹 단어 체커 / Python

k_dah·2022년 1월 14일
0

CodingTest

목록 보기
9/16

<1316번>

코드1

import sys
input = sys.stdin.readline


n = int(input())
ans = n

for i in range(n):
    vocabs = input().rstrip()
    ch = []
    idx = 0

    while idx < len(vocabs) - 1:
        if vocabs[idx] != vocabs[idx+1]:
            if vocabs[idx] in ch:
                ans -= 1
                break
            else:
                ch.append(vocabs[idx])
        idx += 1
    if idx == len(vocabs) - 1 and vocabs[idx] in ch:
        ans -= 1

print(ans)

while문으로 현재 인덱스의 문자와 인덱스+1의 문자를 비교하고 문자를 따로 리스트에 저장한다.
이때 리스트에 이미 존재하는 문자인지 확인을 하는데 이미 존재한다면 그룹 단어가 아닌 것.
인덱스 와 인덱스+1을 비교하기 때문에 맨 마지막 문자의 경우 인덱스+1을 하면 에러가 발생한다. 그래서 맨 마지막 문자는 while문 밖에서 따로 검사하도록 했다.
while문 안에서 깔끔하게 다 넣고 싶었는데 생각해보다가 말았다. 고쳐봐야지.
효율적인 코드로 짜고 싶었는데 방법을 모르겠어서 그냥 일단 100점 맞추는 것만 생각하고 풀었다.
다른 코드들 찾아봐야겠다.

코드2

import sys
input = sys.stdin.readline

ans = 0

for i in range(int(input())):
    vocab = input().rstrip()
    if list(vocab) == sorted(vocab, key=vocab.find):
        ans += 1

print(ans)
  • 문자열.find('문자')
    문자열 내에서 가장 먼저 발견되는 '문자'의 인덱스를 반환한다.
    즉, '문자'가 문자열 내에서 여러 번 반복되더라도 가장 첫 번째 위치를 반환한다.
  • sorted(vocab, key = vocab.find)
    key의 인수로 함수를 전달받고 vocab 내의 모든 문자들에게 해당 함수를 적용한다.
profile
개똥이

0개의 댓글