현재

[Java][BaekJoon][2941] 크로아티아 알파벳 본문

알고리즘/백준

[Java][BaekJoon][2941] 크로아티아 알파벳

AAAge 2023. 10. 4. 20:09

<문제의도>

의도에 맞는 적절한 조건문으로 조건을 찾고

예외처리를 할 수 있느냐 묻는 문제이다.( 배열의 범위를 벗어났을 경우 )

 

<풀이코드>

import java.util.Scanner;

public class BaekJoon_Java_2941 {
    public static void main(String[] args) {
       
        Scanner scn = new Scanner(System.in);

        String str = scn.nextLine();

        int count = 0;

        char Strings [] = new char[str.length()];

        for ( int i = 0 ; i < str.length(); i++ ){
            Strings[i] = str.charAt(i);
        }

        for ( int i = 0 ; i < str.length(); i++ ){ //c단어 일때
            if (Strings[i] == 'c'){
                if ( i < str.length() - 1){
                    if (Strings[i+1] == '=' || Strings[i+1] == '-' ){
                        i += 1;
                    }
                }
            }
            else if (Strings[i] == 'd'){ // d일때
                if ( i < str.length() - 1){
                    if (Strings[i+1] == '-' ){
                        i += 1;
                    }                
                    else if(Strings[i+1] == 'z' ){
                        if ( i < str.length() - 2){
                            if(Strings[i+2] == '='){
                                    i += 2;
                            }
                        }
                    }
               
                }
            }
            else if (Strings[i] == 'l'){ //l일때
                if ( i < str.length() - 1){
                    if (Strings[i+1] == 'j'){
                        i += 1;
                    }
                }
            }
            else if (Strings[i] == 'n'){ //n일때
                if ( i < str.length() - 1){
                    if (Strings[i+1] == 'j'){
                        i += 1;
                    }
                }
            }
            else if (Strings[i] == 's'){ //s일때
                if ( i < str.length() -1 ) {
                    if (Strings[i+1] == '='){
                        i += 1;
                    }
                }
            }
            else if (Strings[i] == 'z'){ //z일때
                if ( i < str.length() - 1){          
                    if (Strings[i+1] == '='){
                        i += 1;
                    }
                }
            }
            count++;
        }
        System.out.println(count);
    }
}

<해결 과정>

특정문자 다음을 찾는 과정에서 배열의 크기를 넘어가는 문제가 발생하였다.

(vsCode에서 실행했을때는 문제가 없었지만, 제출할 때 문제 발생)

그래서 처음에는 특별한 API가 있나 찾아보았지만 특별한 API는 없어서 i가 배열의 길이보다 적을때만

가능하도록 추가하였다. 살짝 어거지로 푼 느낌이 들었었는데 다른사람들도 비슷하게 푼사람들도 있어서

다행이라고 생각하였다. ( 조건을 생각하는데만 2시간은 걸린듯 하다.. ㅋ )

<문제 출처>

https://www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

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

www.acmicpc.net