본문 바로가기
아기 개발자/백준 문제풀이

[BOJ_JAVA] 백준 2941번 : 크로아티아 알파벳 @달깅

by 달깅 2019. 11. 4.

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

 

아니 처음에 이제 작성을 딱 했는데

다 맞게 한 거 같은데 도대체가 반례가 안찾아졌다..ㅠㅠㅠㅠㅠ

게시판에 있는 반례들 대부분 다 제대로 되는데 왜 안되는 지 모르겠는거..ㅜㅜㅜ

근데 알고봤더니 ㅎㅎ 하나 조건을 == 으로 적어놨었다~~

 


정답코드

 

#해법1. 

import java.util.*;

public class Test{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String input=sc.nextLine();
        int count=0;

        for (int i=0; i<input.length(); i++) {
            if (i==input.length()-1) {
                count++;
            } else if (i==input.length()-2) {
                if (input.substring(i, i+2).equals("c=") || input.substring(i, i+2).equals("c-") ||
                input.substring(i, i+2).equals("d-") ||
                input.substring(i, i+2).equals("lj") ||input.substring(i, i+2).equals("nj") ||
                input.substring(i, i+2).equals("s=") ||input.substring(i, i+2).equals("z=")) {
                    count++;
                    i++;
                } else {
                    count++;
                }

            } else {
                if (input.substring(i, i+2).equals("c=") || input.substring(i, i+2).equals("c-") ||
                input.substring(i, i+2).equals("d-") ||
                input.substring(i, i+2).equals("lj") ||input.substring(i, i+2).equals("nj") ||
                input.substring(i, i+2).equals("s=") ||input.substring(i, i+2).equals("z=")) {
                    count++;
                    i++;
                    
                } else if (input.substring(i, i+3).equals("dz=") ) {
                    count++;
                    i+=2;
                } else{
                    count++;
                }
            }
        }

        System.out.println(count);

    }
}

 

하하 저 한 줄 때문에 안돼서 얼마나 애를 먹었는지ㅠㅠㅠ

그리고 또 좋은 방법은 치환을 사용하는 법!!

 

 

#해법2.

import java.util.*;

public class Test{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String input=sc.nextLine();
        
        String[] words={"c=","d-","dz=","c-","lj","s=","nj","z="};

        for (int i=0; i<words.length; i++) {
            if (input.contains(words[i])) {
                input=input.replaceAll(words[i], "*");
            }
        }

        System.out.println(input.length());
    }
}

코드 길이도 훨씬 짧고 직관적이다!

그리고 이걸 사용할 때 주의점은 dz=가 앞에 있어야함!

왜냐면 dz= 랑 z=가 겹쳐서 z=가 먼저 카운트되면 안되기 때문이다..ㅠㅠ

 

은근히 복잡하다..!

 

그리고 아직 배울 점이 많고 사고가 제대로 개발자스럽게(?) 안되는 것 같다. 화이팅 화이팅!

댓글