백준 2941번 자바(JAVA)

SuYeong·2022년 1월 19일
1

백준 2941번 자바(JAVA)

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

위의 문제를 풀어보도록 하겠다.

문제

  • 입력받은 크로아티아 단어가 몇개의 크로아티아 알파벳으로 이루어져 있는지 구하는 것

  • 크로아티아 문자는 여러개의 알파벳(문자)로 이루어질 수 있다.

테스트 케이스 분석

단어문자문자 갯수
ljes=njaklj, e, s=, nj, a, k6개
ddz=z=d, dz=, z=3개
nljjn, lj, j3개
c=c=c=, c=2개
dz=akdz=, a, k3개

구현 과정

  1. 문자열 입력
  2. 문자열의 length만큼 for문 돌린다
  3. 부분 문자열 중에서 표의 크로아티아 문자열과 일치하면, 문자 갯수에 1을 더하고 알파벳 길이만큼 for문을 넘어간다.
  4. 총 문자 갯수를 출력한다.

코드

import java.util.Scanner;

class Main {

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

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

            String str = scanner.nextLine();

            int tot = 0;

            for (int i = 0; i < str.length(); i++) {
                i += test(str, i);
                tot++;
            }
            System.out.println(tot);
    }

    public static int test(String str, int idx) {
        String subStr;

        if(idx+1 < str.length()) {
            subStr = str.substring(idx, idx + 2);
            for (int j = 0; j < strArr.length - 1; j++) {
                if (subStr.equals(strArr[j]))
                    return 1;
            }
        }

        if(idx+2 < str.length()) {
            subStr = str.substring(idx, idx + 3);
            if (subStr.equals(strArr[strArr.length - 1]))
                return 2;
        }

        return 0;
    }
}

고찰

  • 문자열의 범위를 고려하는 것을 깜빡해서, 예외가 발생했었다. 이 부분을 잊지 말자
  • String클래스는 equals() 메서드를 오버라이딩 해서, 문자열 비교가 가능하다.
profile
안녕하세요

0개의 댓글