반응형
1. 문제 추상화
입력받은 문자열에서 크로아티아 문자가 사용된 횟수를 구하시오.
2. 알고리즘
첫 번째 방법
String API 이용하기 ( replaceAll 메소드 )
두 번째 방법
if- else if 문으로 탐색하기
3. 풀이
첫 번째 방법
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String[] croatiaWords = {"c=","c-","dz=","d-","lj","nj","s=","z="};
// 크로아티아 문자를 String 배열에 저장한다.
// 주의! dz= 이 z=보다 앞에 저장되어야 한다.
Scanner sc = new Scanner(System.in);
String value = sc.next();
for(int i=0; i<croatiaWords.length;i++) {
value = value.replaceAll(croatiaWords[i],"0");
// replaceAll 메소드를 활용하여, 크로아티아 문자가 쓰인 부분을 0으로 바꾼다.
}
System.out.println(value.length());
//문자열의 길이가 곧 문자의 개수이다.
}
}
두 번째 방법
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String str = sc.next();
int nWord = 0;
for(int i = 0; i<str.length(); i++) {
nWord++; // 단어 개수 세기
if(i < str.length()-1) { // 끝문자 아닌 경우에만 탐색
i = searchWord(i,str); // 메소드 호출
}
}
System.out.println(nWord);
}
public static int searchWord(int i, String str) {
// 현재 문자와 다음 문자가 크로아티아 알파벳과 일치하면 i 증가시키기
if(str.charAt(i)=='c') {
if(str.charAt(i+1)=='=') {
i++;
}
else if(str.charAt(i+1)=='-') {
i++;
}
}
else if(str.charAt(i)=='d') {
if(str.charAt(i+1)=='z') {
if(i <str.length()-2) { // i가 전체 길이의 2보다 작아야 함.
if(str.charAt(i+2)=='=') {
i += 2;
}
}
}
else if(str.charAt(i+1)=='-') {
i++;
}
}
else if(str.charAt(i)=='l') {
if(str.charAt(i+1)=='j') {
i++;
}
}
else if(str.charAt(i)=='n') {
if(str.charAt(i+1)=='j') {
i++;
}
}
else if(str.charAt(i)=='s') {
if(str.charAt(i+1)=='=') {
i++;
}
}
else if(str.charAt(i)=='z') {
if(str.charAt(i+1)=='=') {
i++;
}
}
return i; // 증가된 i 반환하기
}
}
반응형
'문제풀이 > String' 카테고리의 다른 글
[PS] BOJ2608 로마숫자 ( string ) with JAVA (0) | 2023.08.28 |
---|---|
[PS] BOJ165000 문자열 판별 ( String ) with JAVA (0) | 2023.08.23 |
[CodingTest] BOJ17413 단어뒤집기2 ( 문자열 ) with Python (0) | 2023.06.09 |
[JAVA] 백준 1436번 영화감독 숌 : 문자열 찾기 (0) | 2021.07.31 |
[JAVA] 백준 2908번 상수 : 문자열 역순 출력 (0) | 2021.07.12 |