본문 바로가기
알고리즘/📌백준

백준: 크로아티아 알파벳

by IMSfromSeoul 2021. 8. 12.

🏆 문제정보

문제 난이도 : 하

문제 유형 : 구현

📌 생각

두 가지 방법으로 풀려고 한다.

 

1. substring 이용하는 방법

2. contains 와 replace api를 이용하는 방법

📌1. substring

단순하게 생각해서,

 

i부터 2번째

i부터 3번째 단어를 확인한다.

 

만약 단어가 일치한다면 count를 증가시키고, continue를 통해 다음 loop를 진행한다.

 

이 때 포인트는 크게 2가지가 있다.

🔥 포인트 1

a: for <- 입력값 loop:
	substring 2,3개
    for <- 크로아티아 알파벳과 일치하는지 확인하는 루프:
        만약 일치한다면:
           count++
           i=i+1
           continue a;

for loop에서 i값을 증가시켜서 loop를 돌게 되면 for loop가 시작될 때 i가 다시 한번 증가되기 때문에, 만약 i+2를 해줄거면 i+1을 해줘야 한다.

또한 continue나 break는 default가 가장 가까운 loop고, 지정하면 지정한 곳으로 빠져나간다 ( go to )

🔥 포인트 2

subString은 해당 index+1 까지만 해당된다. 그래서 substring +3 값을 확인하기 위해 String s 의 뒤에 쓰레기 값 2개를 넣어주었다. loop는 뒤에 쓰레기값 2개를 뺀 것까지만 진행하면 된다.

🔥 코드

package src.backjoon.크로아티아알파벳;

import java.io.FileNotFoundException;
import java.util.Scanner;

public class Croatia {

    static String[] arr = {"c=","c-","dz=","d-","lj","nj","s=","z="};

    public static void main(String[] args) throws FileNotFoundException {
        Scanner sc = new Scanner(System.in);

        String s= sc.next();
        String sPlusTrash = s+"**";

        int count=0;

        a:for(int i=0;i<sPlusTrash.length()-2;i++){
            String s1 = sPlusTrash.substring(i, i + 2);
            String s2 = sPlusTrash.substring(i, i+3);

            for(String v : arr){
                if(s1.equals(v)){
                    count+=1;
                    i=i+1;
                    continue a;
                }else if(s2.equals(v)){
                    count+=1;
                    i=i+2;
                    continue a;
                }
            }
            count+=1;
        }
        System.out.println(count);
    }
}

📌 2. contains, replace 이용

replace = s.replace(value, " ");

이 때 조심할 점은 위와 같은 실수를 했는데, 이렇게 하면 바뀐 문자열에 다시 쌓여서 진행되는게 아니고, 마지막 문자열만 치환된게 replace에 들어가게 되는 것이다.

🔥 코드

package src.backjoon.크로아티아알파벳;

import java.util.Scanner;

public class CroatiaV2 {
    static String[] arr = {"c=","c-","dz=","d-","lj","nj","s=","z="};

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

        String s = "ljes=njak";

        for(String value : arr){
            System.out.println(value);
            if(s.contains(value)){
                s = s.replace(value, " ");
            }
        }
        System.out.println(s.length());
    }
}

'알고리즘 > 📌백준' 카테고리의 다른 글

백준: Z  (0) 2021.08.20
백준: 배열돌리기 3  (0) 2021.08.12
백준 : 2493번 탑  (0) 2021.08.05
백준 : 스위치 켜고 끄기  (0) 2021.08.02
백준 : 재귀함수가 뭔가요?  (0) 2021.08.02

댓글