티스토리 뷰

알고리즘

백준 1316 - 파이썬

취뽀가자!! 2023. 9. 25. 19:08

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

문제 풀이

단어중에서 알파벳이 처음 나오거나 연속으로 나오는 경우를 제외하고 한번이라도 더 등장하면 그룹단어가 아니다. 여기서 힌트를 얻었고, 이를 코드로 구현해봤다.

 

n = int(input())
result = n

for _ in range(n):
  word = input()
  arr = []
  arr.append(word[0])
  for i in range(len(word)-1):
    if word[i] != word[i+1]:
      if word[i+1] in arr:
        result -= 1
        break
      else:
        arr.append(word[i+1])

print(result)

일단 입력된 단어들은 모두 그룹 단어라고 여긴 후 그룹단어가 아닌 것을 하나씩 빼주는 방식으로 구현했다.

arr 리스트는 한번이라도 등장한 문자를 저장한 리스트이고, 연속으로 등장하지 않는 문자 중에서 arr에 해당 문자가 있는 경우는 그룹단어가 아니기에 해당 단어를 그룹단어 개수에서 빼줬다. 코드 풀이는 이게 전부다. 

 

다른 사람들은 어떻게 풀었나 싶어 코드를 찾아봤다.

 

첫번째 코드는 나와 유사하지만 슬라이싱을 사용하여 코드를 더 간결하게 짰다.

첫번째 코드

n = int(input())
cnt = n

for i in range(n):
  word = input()
  for j in range(0,len(word)-1):
    if word[j] == word[j+1]:
      pass
    elif word[j] in word[j+1:]:
      cnt -= 1
      break

print(cnt)

 

두번째 코드

n = int(input())

group_word = 0
for _ in range(n):
  word = input()
  error = 0
  for i in range(len(word)-1):
    if word[i] != word[i+1]:
      new_word = word[i+1:]
      if new_word.count(word[i]) > 0:
        error += 1
  if error == 0:
    group_word += 1

print(group_word)

두번째 코드는 count함수를 이용하여 풀었다. 해당 문자 뒤에 나오는 문자 중에서 똑같은 문자가 있는지를 count함수를 통해 확인하고 0보다 크면 존재한다는 것이기에 그룹단어에서 빼주는 모습이다.

 

느낀점

스스로 생각해 풀었다는 것에 뿌듯했고, 다른 사람들의 코드를 보니 풀이에도 여러가지 방식이 있다는게 참 신기하다. 파이썬을 사용하여 알고리즘을 풀고 있는만큼 파이썬의 기법을 좀 더 활용하여 좀 더 간결하게 풀 수 있도록 노력해야 되겠다.

'알고리즘' 카테고리의 다른 글

백준 2653 - 파이썬  (0) 2023.09.29
백준 25206 - 파이썬  (0) 2023.09.25
백준 - 1157 파이썬  (0) 2023.09.20
백준 11718 - 파이썬  (0) 2023.09.16
백준 3109 - 파이썬  (1) 2023.09.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함