문제풀이/String

[JAVA] 백준 5622번 크로아티아 알파벳 : 문자열 탐색

IT록흐 2021. 7. 13. 09:45
반응형
 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

 

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 반환하기
	}

}
반응형