ETC. 백준 알고리즘 자바 2941 ‘크로아티아 알파벳’ 문제풀이
Problem
Solution
처음에 switch-case문을 사용했는데, 다른 분이 배열과 replace를 사용한 것을 보고..와우!
1) i번째 문자와 i+1번째 문자를 묶어서 크로아티아 알파벳과 비교한다. 맞으면 다음 인덱스 i값을 비교 다음 문자를 가리키도록 증가시킨다. 매 연산 시 단어의 합계를 증가시킨다.
메모리: 12888KB, 속도: 76MS
2) String 배열에 크로아티아 알파벳을 전부 저장한다. 알파벳이 발견된 곳을 ‘a’로 replace 한다. 모든 replace가 종료된 후의 문자열의 크기가 단어의 합계가 된다.
메모리: 13000KB, 속도: 72MS
Code
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException{ String word = new BufferedReader(new InputStreamReader(System.in)).readLine(); int sum = 0, i; for(i = 0; i < word.length()-1; i++) { switch(Character.toString(word.charAt(i))+Character.toString(word.charAt(i+1))) { case "c=":case "c-":case "d-": case "lj":case "nj":case "s=":case "z=": i++; break; case "dz": if(word.charAt(i+2) == '=') i += 2; break; } sum++; } System.out.print(i == word.length()-1 ? sum+1 : sum); } }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException{ String word = new BufferedReader(new InputStreamReader(System.in)).readLine(); String[] alphabet = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="}; for(String str : alphabet) word = word.replace(str, "a"); System.out.print(word.length()); } }