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
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 32335] 부자가 될 거야! [Java] (0) | 2025.04.08 |
---|---|
[백준 01639] 행운의 티켓 [Java] (0) | 2025.04.07 |
[백준 01408] 24 [Java] (0) | 2025.04.04 |
[백준 14335] 서로 다른 부분 수열의 개수 [Java] (0) | 2025.04.03 |
[백준 32184] 디미고에 가고 싶어! [Java] (0) | 2025.04.02 |