본문 바로가기
PS

[백준/BOJ] 2941번 크로아티아 알파벳 (JAVA)

by 오늘이 내가 된다. 2022. 1. 15.

[백준/BOJ] 2941번 크로아티아 알파벳 (JAVA)

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

 

2941번: 크로아티아 알파벳

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

www.acmicpc.net

문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때,
몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다.
lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

풀이1
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    String str = sc.nextLine();

    int len = str.length();

    int count = 0;

    for (int i = 0; i < len; i++) {

    char ch = str.charAt(i);

    if (ch == 'c') {	// 현재 값이 c이고
        if (i < len - 1) {	// 다음 배열의 칸이 있을 때
            if (str.charAt(i + 1) == '=') { // 다음 값이 = 이면
                i++; 	// i를 증가 시키세요
            } else if (str.charAt(i + 1) == '-') { // 그게 아니라 다음 값이 - 이면
                i++;	// i를 증가 시키세요
            }
        }
    }

    else if (ch == 'd') {	// 현재 값이 d이고
        if (i < len - 1) {	// 다음 배열의 칸이 있을 때
            if (str.charAt(i + 1) == 'z') {	// 다음 값이 z 이면
                if (i < len - 2) {	// 다다음 배열의 칸이 있을 때
                    if (str.charAt(i + 2) == '=') {	// 다다음 값이 = 이면
                        i += 2;		// i를 2 증가 시키세요 ( dz- 인 경우 )
                    }
                }
            }
            else if (str.charAt(i + 1) == '-') {	// 그게 아니라 다다음 값이 - 이면
                i++;	// i를 증가 시키세요 ( d- 인 경우 )
            }
        }
    }

    else if (ch == 's') {
        if (i < len - 1) {
            if (str.charAt(i + 1) == '=') {
                i++;
            }
        }
    }

    else if (ch == 'z') {
        if (i < len - 1) {
            if (str.charAt(i + 1) == '=') {
                i++;
            }
        }
    }

    else if (ch == 'l') {
        if (i < len - 1) {
            if (str.charAt(i + 1) == 'j') {
                i++;
            }
        }
    }

    else if (ch == 'n') {
        if (i < len - 1) {
            if (str.charAt(i + 1) == 'j') {
                i++;
            }
        }
    }
 // if와 else에 걸리게 되면 i값을 증가해서 그만큼 i의 범위를 줄임 => count할 수 있는 양을 줄임
    count++; 
    }
    System.out.println(count);
	}
}
풀이2
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str[] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
		
		String st = sc.nextLine();
		
		for(int i=0; i<str.length; i++) {	// 배열의 길이
			if(st.contains(str[i])) // contains() : 해당 문자열이 존재하면 true 아니면 false
				st = st.replace(str[i], "!");	// replace([기존문자], [바꿀문자])
		}
		
		System.out.println(st.length());
	}
}

 

댓글