알고리즘/Baekjoon
[백준] 2941 - 크로아티아 알파벳
klyhyeon
2020. 9. 10. 13:06
728x90
#String #StartsWith #substring
문제 풀이
배열과 반복문으론 풀 수 없었던 문제. 풀이를 보고서야 String 메서드 StartsWith을 사용해야함을 알 수 있었다. 문자열이 입력한 문자로 시작하면 true를 반환하는 boolean 타입 메서드다. 로직은 true로 반환됐을 때 substring으로 문자열을 잘라주었고, false의 경우 1글자만 substring으로 잘라줬다. 크로아티아 글자 수 count 변수 croCnt엔 한 번 돌 때마다 ++ 해줬다.
중첩 반복문을 사용했다. 처음엔 for문 2개를 썼지만 code의 길이가 일정하지 않기 때문에 조건을 넣을 수 있는 while문에 code.length > 0 을 stop 조건으로 뒀다.
기억하자
substring 했을 때 시작 index는 0이다.
++과 + 1은 엄연히 다르다.
package baekJoon.week7;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CroatiaAlpha_2941_ex {
static String code;
static String[] croAlphas;
static int croCnt = 0;
static int codeIdx = 0;
static boolean flag;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
code = br.readLine();
croAlphas = new String[]{"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
while (codeIdx < code.length()) {
flag = false;
for (int j = 0; j < croAlphas.length; j++) {
if (code.startsWith(croAlphas[j])) {
croCnt++;
flag = true;
code = code.substring(codeIdx + croAlphas[j].length(), code.length());
break;
}
}
if (!flag) {
croCnt++;
code = code.substring(codeIdx + 1 , code.length());
}
}
System.out.println(croCnt);
}
}