알고리즘

[백준 2941] 크로아티아 알파벳 - 파이썬

Codult 2024. 1. 25. 14:27
728x90

백준 2941 - 크로아티아 알파벳

 

* 풀이과정

알파벳을 리스트에 담아서 하나씩 탐색하고 중복되는 것을 빼는 방법으로 풀었는데, 다른 풀이를 보니 순차적으로 탐색하되 탐색한 것들은 1로 변환하여 중복을 방지하면서 훨씬 간단하게 풀 수 있었다.

 

// 내 풀이

1) 문제에서 제공된 입력할 수 없는 8종류의 크로아티아 알파벳을 리스트(croatia)에 담는다.

2) 해당 리스트와 동일한 글자가 입력받은 단어(word)에 포함되어 있다면 count ++

3) 'dz='가 있다면 이는 'z='에서 이미 카운트 되었으므로, 'dz='가 나타나는 횟수만큼 빼야 한다.

word = input()
# 8종류의 알파벳 리스트 생성
croatia = ['c=', 'c-', 'd-', 'lj', 'nj', 's=', 'z=']
cnt = 0

# 'dz='이 word에 포함되는 횟수를 계산
dz_cnt = word.count('dz=')

# croatia 리스트를 돌면서, 동일한 문자가 나타날 때마다 cnt++
for alphabet in croatia:
    cnt += word.count(alphabet)

# 크로아티아 알파벳 갯수: word 길이 - cnt - dz_cnt
print(len(word) - cnt - dz_cnt)

 

// 다른 풀이

1) 상동

2) 리스트 안에 있는 문자를 순차적으로 탐색하면서, 동일한 문자가 있다면 해당 문자를 1로 변환한다

  ※ 이미 'dz='는 1로 변환되어 'z=' 탐색 시에 중복되지 않는다!

3) 탐색이 완료되면, word의 길이를 출력한다.

word = input()
a_list = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

for char in a_list:
    word = word.replace(char, '1')
    
print(len(word))
728x90