백준 문자열 문제입니다.
문제
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으로 대체한 총 갯수) 수식으로 해결한 풀이를 볼 수 있었습니다.🐷🐷🐷
감사합니다.🐥🐥🐥