📜 문제


BOF 2941번, 크로아티아 알파벳

🔥난이도🔥


image

1차 풀이 ❌


입력된 단어에서 몇 개의 크로아티아 알파벳으로 이루어져 있는지 찾는 문제다.

단어에서 2~3개의 알파벳으로 이루어진 크로아티아 알파벳을 카운트하고 제거하는 방식으로 접근했다.

  1. 2~3개의 알파벳으로 이루어진 크로아티아 알파벳 리스트 생성

  2. 입력된 단어에서 2~3개의 알파벳으로 이루어진 크로아티아 알파벳 수만큼 카운트하고 제거한다.

  3. 나머지 1개의 알파벳으로 이루어진 크로아티아 알파벳 수를 더한다.

코드

# 2~3개의 알파벳으로 이루어진 크로아티아 알파벳
c_alpha = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

word = input()

sum = 0     # 크로아티아 알파벳 수

# 크로아티아 알파벳 제거 및 카운트
for i in c_alpha:
    # 크로아티아 알파벳만큼 카운트
    sum += word.count(i)
    # 해당 크로아티아 알파벳 제거
    word = word.replace(i, '')

# 나머지 한 글자 알파벳 카운트
sum += len(word)

print(sum)

첫 번째 시도는 아래와 같은 예외 케이스 때문에 실패했다.

nljj 단어에서 lj를 제거하면 n과 j가 각각의 알파벳인데 nj가 되어 하나의 알파벳으로 카운트되기 때문이다.

결과

image

2차 풀이 ⭕


크로아티아 알파벳을 제거 후에 다른 문자로 치환을 하면 위에서 발생하는 예외 케이스를 제거할 수 있었다!

nljj 단어에서 lj를 다른 문자로 치환하면 n*j가 되어 n과 j를 각각의 알파벳으로 카운트할 수 있다.

또한 2~3개의 알파벳으로 이루어진 크로아티아 알파벳을 * 하나의 문자로 치환하므로 알파벳 수를 카운트하지 않아도 된다!

치환 완료된 단어의 길이가 크로아티아 알파벳의 수다.

코드

croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

word = input()

# 변경 알파벳 검사
for i in croatia:
    # 변경 알파벳을 *로 치환 (하나의 문자로 변경됨)
    word = word.replace(i, '*')

print(len(word))

결과

image

현재 티어 🥈


image