백준_2941

임정민·2023년 7월 7일
1

알고리즘 문제풀이

목록 보기
72/173
post-thumbnail

백준 문자열 문제입니다.

문제

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

[나의 풀이]

word = list(input())
from collections import deque
word = deque(word)

cro = {'c=':2,'c-':2,'dz=':3,'d-':2,'lj':2,'nj':2,'s=':2,'z=':2}
cnt = 0

while word:

    el1 = word.popleft()
    try:
        el2 = word.popleft()
        if el1+el2 in cro.keys():
            cnt += 1
            continue
        else:
            word.appendleft(el2)
        try: 
            el2 = word.popleft()
            el3 = word.popleft()
            if el1+el2+el3 in cro.keys():
                cnt += 1
                continue
            else:
                word.appendleft(el3)
                word.appendleft(el2)
        except:
            word.appendleft(el2)
    except:
        pass
    cnt += 1

print(cnt)

문자열 문제입니다. 입력되는 단어(word)에서 크로아티아 알파벳 갯수를 세는 문제입니다.

크로아티아 알파벳은

로 맵핑됩니다. 입력값으로 일반 알파벳과 변경된 크로아티아 알파벳이 주어지며 총 알파벳 갯수를 세기 위해 deque 구조에 넣어 앞에서 부터 2자리,3자리를 판별하며 popleft()하는 방식입니다.🐼🐼🐼

다른 사람의 풀이로 첫번째

[다른 사람의 풀이1]

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

for i in croatia :
    word = word.replace(i, '*')  # input 변수와 동일한 이름의 변수
print(len(word))

위와 같은 방식으로 해당 크로아티아 알파벳을 '*' replace로 대체하는 방법이였습니다.
replace 사용하는 아아디어는 생각했었지만 아래 코드 처럼

for i in croatia :
    word = word.replace(i, '')

크로아티아 알파벳을 '' 공백으로 대체하였을 때,
입력값으로 'ddljz=z=' 가 주어지면 'ddz=z='로 대체 될 수 있어 갯수가 달라지는 케이스 때문에 replace는 제외하였었는데 특정문자로 대체하는 아이디어를 생각해내지 못했습니다.😣😣😣

두번째 다른 풀이로

[다른 사람의 풀이2]

n = input()
d = ['c=','c-','dz=','d-','lj','nj','s=','z=']
 
cnt = 0
for i in d:
    while i in n:
        cnt += n.count(i)
        n = n.replace(i,'0'*len(i))
print(cnt + len(n) - n.count('0'))

같은 replace를 활용하는 방식이되 cnt(크로아티아 알파벳 갯수)+len(n)(전체 알파벳 갯수)+n.coint('0')(크로아티아 알파벳 스펠링을 0으로 대체한 총 갯수) 수식으로 해결한 풀이를 볼 수 있었습니다.🐷🐷🐷

감사합니다.🐥🐥🐥

profile
https://github.com/min731

0개의 댓글