728x90
문제
https://www.acmicpc.net/problem/2941
풀이
그냥 케이스 나누고 인덱싱에 주의하면서 풀었음!
근데 같이 스터디하는 친구가 다른 방법으로 잘 풀어서 그것도 코드에 추가해 놓아야겠음 ㅎㅎㅎ
첫번째가 내가 그냥 푼 코드고 두번째가 새로 알게된 방식!
문자열을 다룰 때는 이처럼 내장 함수를 쓰면 많이 편하니까 평소에 자주 쓰는 버릇을 들여놔야겠다
이 코드에서는 String.contains()랑 String.replaceAll()가 쓰였음
String.contains(): 문자열에 ()안의 문자열을 포함하면 true 반환
String.replaceAll(): 문자열 안의 해당 문자열를 원하는 문자로 변경
코드
- 내 풀이
// 2941번 크로아티아 알파벳
// https://www.acmicpc.net/problem/2941
package BAEKJOON;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Num2941_크로아티아알파벳 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int length = str.length();
int count = 0;
for (int i = 0; i < length; i++) {
char c = str.charAt(i);
if(c == 'c' && i < length - 1) { // 문자가 c이고 마지막 문자가 아니면
if(str.charAt(i + 1) == '=' || str.charAt(i + 1) == '-') {
i++;
}
} else if(c == 'd' && i < length - 1) { // 문자가 d이고 마지막 문자가 아니면
if(str.charAt(i + 1) == '-') {
i++;
} else if(str.charAt(i + 1) == 'z' && i < length - 2) { // dz인 경우 마지막에서 두번째 문자가 아니면
if(str.charAt(i + 2) == '=') {
i += 2;
}
}
} else if((c == 'l' || c == 'n') && i < length - 1) { // 문자가 l이거나 n이고 마지막 문자가 아니면
if(str.charAt(i + 1) == 'j') {
i++;
}
} else if((c == 's' || c == 'z') && i < length - 1) { // 문자가 s이거나 z이고 마지막 문자가 아니면
if(str.charAt(i + 1) == '=') {
i++;
}
}
count++;
}
System.out.println(count);
}
}
- 새로 알게 된 풀이
package BJ;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BJ_2941_크로아티아알파벳 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String[] cro = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
for(int i=0; i<cro.length; i++){
if(input.contains(cro[i]))
input = input.replaceAll(cro[i],"*");
}
System.out.println(input.length());
}
}
728x90