Python Programming/[BOJ ] Algorithm

[백준 BOJ] 1316번(그룹 단어 체커) Python 풀이

간토끼 2023. 8. 12. 07:00
728x90

# 해당 포스팅은 이제 막 알고리즘 공부를 시작한 초보 수준에서 작성했음을 이해해주시고, 비난보다는 따뜻한 조언을 부탁드립니다.


안녕하십니까, 간토끼입니다.

오늘은 백준 1316번 (그룹 단어 체커)에 대해 다뤄보겠습니다.

 

 

1. 문제 링크

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

그룹 단어단어에 존재하는 모든 문자에 대해서 각 문자가 연속해서 나타나는 경우를 말합니다.

즉 aabbcc는 그룹단어지만, aabba는 그룹단어가 아닙니다. 왜냐하면 a가 b를 지나서 또 등장했기 때문이죠.

하지만 ijk처럼 특정 문자가 1개씩만 존재하는 문자도 그룹단어로 보고, a 하나로만 이루어진 단어도 그룹단어로 봅니다.

입력으로 첫째 줄단어의 개수(N), 둘째 줄부터는 N개의 문자열이 입력되고요.

출력으로는 이 입력들을 바탕으로 그룹 단어를 체크해서 그룹 단어의 개수를 출력하면 됩니다.

 

2. 접근 방법

다음과 같이 접근하였습니다.

결국 그룹단어는 특정 문자에서 다른 문자로 바뀌는 지점을 체크해주면 되는 문제라고 생각했습니다.

즉 i번째까진 a였는데, i+1은 b가 된다면 이때 조건을 따져봐야 하는데요.

만약 이 상황에서 i+1번째 단어가 이전에 등장했던 단어라면 이는 그룹단어가 될 수 없겠죠.

어려운 문제는 아니었습니다.

 

3. 코드

# 그룹 단어 체커

# initial setting
# 아이디어
# 단어를 쭉 읽다가 만약 i번째와 i-1번째가 다를 때, i번째 단어가 i-1, i-2, ... 에 있다면 얘는 아웃
# 그게 아니라면 다시 체크
# ex. abc
# i = 0 -> a[i] : a
#       -> a[i+1] : b 이때 a[i+1] != a[i] 이므로 a[i+1] 가 이전에 있었다면 아웃
# 


num = int(input())
cnt = 0

for i in range(num):
    words = input() # i-th 단어 입력
    bow = []
    # 만약 문자열이 1개로만 이루어져있다면 그룹단어임.
    if len(words) == 1:
        cnt += 1
    else: 
        for j in range(len(words)):
            if j == 0:
                bow.append(words[0])
            elif j > 0:
                if words[j] == words[j-1]:
                    bow.append(words[j])
                    if j == len(words)-1:
                        cnt += 1
                    
                elif words[j] != words[j-1]: # j번째 철자가 앞의 철자와 다를 때
                    if words[j] not in bow:
                        if j == len(words)-1:
                            cnt += 1
                        else:
                            bow.append(words[j])
                    elif words[j] in bow: # j번째 철자가 앞에서 등장했다면 중단
                        break
                
print(cnt)

 

감사합니다.

잘 읽으셨다면 게시글 하단에 ♡(좋아요) 눌러주시면 감사하겠습니다 :)

(구독이면 더욱 좋습니다 ^_^)

* 본 블로그는 학부생이 운영하는 블로그입니다.

따라서 포스팅에 학문적 오류가 있을 수 있으며, 이를 감안해서 봐주시면 감사하겠습니다.

 


- 간토끼(DataLabbit)

- B.A. in Economics, Data Science at University of Seoul

728x90