C#/백준 알고리즘
2022.01.25 [백준] C# 크로아티아 알파벳
ian's coding
2022. 1. 25. 01:18
728x90
반응형
문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳변경č | c= |
ć | c- |
dž | dz= |
đ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
풀이 1
if문을 이용하여 1개 이상의 문자로 이루어진 크로아티아 알파벳을 cnt로 카운트 해준 뒤, 전체 길이에서 cnt를 빼준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
using System;
class Program{
static void Main(){
string s = Console.ReadLine();
int cnt =0;
for(int i=0;i<s.Length-1;i++){
if(s[i]=='c'&&s[i+1]=='-'||s[i+1]=='='){
cnt++;
}else if(i<s.Length-2&&s[i]=='d'&&s[i+1]=='z'&&s[i+2]=='='){
cnt++;
}else if(s[i]=='d'&&s[i+1]=='-'){
cnt++;
}else if(s[i]=='n'&&s[i+1]=='j'){
cnt++;
}else if(s[i]=='l'&&s[i+1]=='j'){
cnt++;
}else if(s[i]=='z'&&s[i+1]=='='){
cnt++;
}else if(s[i]=='s'&&s[i+1]=='='){
cnt++;
}
}
Console.Write(s.Length-cnt);
}
}
|
cs |
풀이 2
풀이 1의 코드도 나쁘지 않지만 풀이 방법을 검색 중, 다른 괜찮은 코드를 발견해서 사용해 보았다.
Replace(문자열1, 문자열2)을 이용하여 문자열 안에 문자열1이 있으면 문자열2로 치환해 주었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
using System;
using System.Linq;
class Program{
static void Main(){
string s = Console.ReadLine();
string[] croatiaAlphabet = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };
for(int i=0;i<croatiaAlphabet.Length;i++){
//문자열에 크로아티아알파벳이 있으면 e로 치환.
//크로아티아알파벳을 지우면 다른 문자열이 생성될 수도 있기때문에 위의 문자열에 없은 e로 치환
s=s.Replace(croatiaAlphabet[i],"e");
}
Console.Write(s.Length);
}
}
|
cs |
728x90
반응형