문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳변경
č | c= |
ć | c- |
dž | dz= |
đ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
예제입력 |
예제출력 |
ljes=njak | 6 |
ddz=z= | 3 |
nljj | 3 |
c=c= | 2 |
dz=ak | 3 |
문제풀이
우선, 지문의 표에 나와있는 글자를 String 배열로 저장해놓는다
크로아티아 문자 수를 세어줄 cnt를 생성하고
stringBuilder의 length가 0이 아니라면 계속 반복문을 돌리도록 한다.
stringBuilder에서 문자를 받아내고, String의 문자가 있었는지 cnt와 비교할 용도로 tmp를 생성한다
String 배열에서 문자를 하나씩 꺼내서 startsWith 즉 문자의 첫번째 시작하는 문자와 동일한게 있는지 확인하고
존재 할 경우 해당 문자열 길이만큼 stringBuilder에서 제거해준다.
cnt++이 되었다는 것은 문자를 찾았다는 것이기 때문에 for 반복문을 break; 해주고
만약 tmp와 cnt가 다를 경우 다음으로 넘어가고 아닐 경우 문자표에 존재하지 않는 문자이기 때문에
stringBuilder에서 하나의 문자 삭제 + cnt++을 해준다. 이를 반복해주면 되겠다.
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
StringBuilder stringBuilder = new StringBuilder(scan.next());
String[] checkAlphabet = {"c=","c-","dz=","d-","lj","nj","s=","z="};
int cnt = 0;
while(stringBuilder.length() != 0){
String S = stringBuilder.toString();
int tmp = cnt;
for(String alphabet : checkAlphabet){
if(S.startsWith(alphabet)){
stringBuilder.delete(0,alphabet.length());
cnt++;
break;
}
}
if(tmp != cnt) continue;
stringBuilder.delete(0, 1);
cnt++;
}
System.out.println(cnt);
}
}
'Etc > problem solving' 카테고리의 다른 글
백준 1316, 그룹 단어 체커 (0) | 2021.11.06 |
---|---|
백준 2750, 수 정렬하기 (0) | 2021.11.04 |
백준 5622, 다이얼 (0) | 2021.11.03 |
백준 2908, 상수 (0) | 2021.11.03 |
백준 1152, 단어의 개수 (0) | 2021.10.31 |