반응형
https://www.acmicpc.net/problem/2941
import sys
alpha = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
input = list(sys.stdin.readline().rstrip())
input.reverse()
sum = 0
while len(input) > 1:
str = input.pop()
if str == 'c' or str == 'd' or str == 'l' or str == 'n' or str == 's' or str == 'z':
str = str + input[-1]
if str in alpha:
input.pop()
sum = sum + 1
elif str == 'dz' and len(input) > 1:
str = str + input[-2]
if str in alpha:
input.pop()
input.pop()
sum = sum + 1
else:
sum = sum + 1
else:
sum = sum + 1
else:
sum = sum + 1
sum = sum + len(input)
print(sum)
문자열에서 크로아티아 알파벳을 포함한 알파벳의 개수를 세는 문제다.
처음엔 왠지 모르게 스택이 떠올라서 파이썬 리스트를 이용한 방법으로 무지성 조건문을 이용해 풀었다.
다른 사람들의 코드를 찾아보니 크로아티아 문자를 하나의 알파벳으로 치환하는 아이디어를 많이 사용하고 있었고 상당히 깔끔해보였다.
#include <iostream>
#include <string>
using namespace std;
int main(){
string alpha[8] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
string input;
cin >> input;
for(int i = 0; i < 8; i++){
while(1){
int idx = input.find(alpha[i]);
if(idx == -1){
break;
}
input.replace(idx, alpha[i].length(), "#");
}
}
cout << input.length();
}
그 아이디어를 이용하여 C++로 다시 작성한 코드이다.
find메소드를 통해 크로아티아 알파벳을 모두 찾은 뒤 replace메소드를 통해 하나의 문자로 치환해주었다.
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 2580 - 스도쿠 (0) | 2022.07.04 |
---|---|
[BOJ] 1339 - 단어 수학 (0) | 2022.07.01 |
[BOJ] 단계별로 풀어보기 - 기본 수학 1 (2) | 2022.06.27 |
[BOJ] 2579 - 계단 오르기 (0) | 2022.02.18 |
[BOJ] 1149 - RGB거리 (0) | 2022.02.18 |