"꾸준하고 완벽한 한 걸음"

PS/Baekjoon Online Judge

[백준 25594] HG 음성기호 [Java]

kimyoungrok 2025. 4. 6. 22:33
728x90

문제

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

 


풀이

문자열 S가 사전에 주어진 매핑표의 문자열들로 구성되어있는지 확인하는 문제다.

직관적인 매핑을 위해 Map으로 매핑 테이블을 만들었다.

단순히 문자열 배열로 만든 후 아스키코드값을 인덱스처럼 활용하는 방법도 있다.

        // Solve
        Map<Character, String> map = new HashMap<>();
        map.put('a', "aespa");
        map.put('b', "baekjoon");
        map.put('c', "cau");
        map.put('d', "debug");
        map.put('e', "edge");
        map.put('f', "firefox");
        map.put('g', "golang");
        map.put('h', "haegang");
        map.put('i', "iu");
        map.put('j', "java");
        map.put('k', "kotlin");
        map.put('l', "lol");
        map.put('m', "mips");
        map.put('n', "null");
        map.put('o', "os");
        map.put('p', "python");
        map.put('q', "query");
        map.put('r', "roka");
        map.put('s', "solvedac");
        map.put('t', "tod");
        map.put('u', "unix");
        map.put('v', "virus");
        map.put('w', "whale");
        map.put('x', "xcode");
        map.put('y', "yahoo");
        map.put('z', "zebra");

우선 주어진 매핑표로 구성이 가능할 경우 It's HG! 이후에 키값들을 출력해야 하므로 결과 버퍼에 문자열을 먼저 넣어줬다.

        sb.append("It's HG!\\n");

문자열 S에 대해 매핑 테이블의 문자열 만큼 부분 문자열들이 일치하는지 비교해보자. 만약 S보다 ㄱ길거나 일치하지 않는다면 S는 올바른 문자열이 아니다.

        int idx = 0;
        while (idx < S.length()) {
            char c = S.charAt(idx);
            String s = map.get(c);
            if (idx + s.length() <= S.length() && s.equals(S.substring(idx, idx + s.length()))) {
                idx += s.length();
                sb.append(c);
            } else {
                sb = new StringBuilder("ERROR!");
                break;
            }
        }


소스코드

https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/practice/25594.java

 

problem-solving/baekjoon-online-judge/practice/25594.java at main · rogi-rogi/problem-solving

Daily Problem Solving Challenges. Contribute to rogi-rogi/problem-solving development by creating an account on GitHub.

github.com

 

728x90