728x90
반응형
2024.09.13기준 - 실버5
728x90
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 주어진 문자열이 해강이가 만든 음성 기호인 HG 표준음성기호로만 사용해서 만들었는지 확인하여 출력하는 문제입니다.
접근 방법
- 문자열의 길이를 먼저 확인합니다.
- 문자열의 길이만큼 입력 받은 문자를 짤라줍니다.
- 짜른 문자열이 HG표준음성기호인지 확인합니다.
- 맞다면 저장을 아니라면 error를 출력하고 멈춰줍니다.
1. 첫 문자 기준으로 문자열 길이를 찾아내는 함수를 만들었습니다.
// 문자의 길이를 구해주는 함수.
private static int lencheck(char c) {
if (c == 'o' || c == 'i') {
return 2;
} else if (c == 'c' || c == 'l' || c == 't') {
return 3;
} else if (c == 'u' || c == 'r' || c == 'n' || c == 'i' || c == 'm' || c == 'j' || c == 'e') {
return 4;
} else if (c == 'a' || c == 'd' || c == 'q' || c == 'v' || c == 'w' || c == 'x' || c == 'y' || c == 'z') {
return 5;
} else if (c == 'p' || c == 'k' || c == 'g') {
return 6;
} else if (c == 'f' || c == 'h') {
return 7;
} else if (c == 'b' || c == 's') {
return 8;
}
return -1;
}
2. 해당하는 문자가 HG표준음성기호 확인을 해주는 함수를 생성했습니다.
// 문자가 일치하는지 확인해주는 함수.
private static boolean strcheck(String s) {
if (s.equals("aespa")) {
return true;
} else if (s.equals("baekjoon")) {
return true;
} else if (s.equals("cau")) {
return true;
} else if (s.equals("debug")) {
return true;
} else if (s.equals("edge")) {
return true;
} else if (s.equals("firefox")) {
return true;
} else if (s.equals("golang")) {
return true;
} else if (s.equals("haegang")) {
return true;
} else if (s.equals("iu")) {
return true;
} else if (s.equals("java")) {
return true;
} else if (s.equals("kotlin")) {
return true;
} else if (s.equals("lol")) {
return true;
} else if (s.equals("mips")) {
return true;
} else if (s.equals("null")) {
return true;
} else if (s.equals("os")) {
return true;
} else if (s.equals("python")) {
return true;
} else if (s.equals("query")) {
return true;
} else if (s.equals("roka")) {
return true;
} else if (s.equals("solvedac")) {
return true;
} else if (s.equals("tod")) {
return true;
} else if (s.equals("unix")) {
return true;
} else if (s.equals("virus")) {
return true;
} else if (s.equals("whale")) {
return true;
} else if (s.equals("xcode")) {
return true;
} else if (s.equals("yahoo")) {
return true;
} else if (s.equals("zebra")) {
return true;
}
return false;
}
3. 입력받은 문자열을 반복문을 통해 참조하는 맨 앞글자만을 이용해 길이와 문자가 맞는치 확인하고 맞다면 길이만큼 i를 더해 주어 계산을 진행합니다.
for (int i = 0; i < s.length();) {
len = lencheck(s.charAt(i));
// 마지막 문자에서 문자열 보다 길이가 길다면 오류가 뜨기 때문에 break
if (i + len > s.length()) {
sb.append("ERROR!");
break;
}
sub = s.substring(i, i + len);
// 문자열이 일치한다면 문자를 저장.
if (strcheck(sub)) {
str.append(s.charAt(i));
// 문자의 길이 만큼 다음 문자 시작.
i += len;
} else { // 일치하지 않다면 break
sb.append("ERROR!");
break;
}
}
4. 입력받은 문자열이 HG표준음성기호라면 출력을 해줍니다.
// 문자열이 HG 표준 음성기호로 이루어져 있다면 출력
if (sb.length() == 0) {
sb.append("It's HG!\n").append(str.toString());
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
String s = br.readLine();
int len;
String sub;
StringBuilder str = new StringBuilder();
for (int i = 0; i < s.length();) {
len = lencheck(s.charAt(i));
// 마지막 문자에서 문자열 보다 길이가 길다면 오류가 뜨기 때문에 break
if (i + len > s.length()) {
sb.append("ERROR!");
break;
}
sub = s.substring(i, i + len);
// 문자열이 일치한다면 문자를 저장.
if (strcheck(sub)) {
str.append(s.charAt(i));
// 문자의 길이 만큼 다음 문자 시작.
i += len;
} else { // 일치하지 않다면 break
sb.append("ERROR!");
break;
}
}
// 문자열이 HG 표준 음성기호로 이루어져 있다면 출력
if (sb.length() == 0) {
sb.append("It's HG!\n").append(str.toString());
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
// 문자의 길이를 구해주는 함수.
private static int lencheck(char c) {
if (c == 'o' || c == 'i') {
return 2;
} else if (c == 'c' || c == 'l' || c == 't') {
return 3;
} else if (c == 'u' || c == 'r' || c == 'n' || c == 'i' || c == 'm' || c == 'j' || c == 'e') {
return 4;
} else if (c == 'a' || c == 'd' || c == 'q' || c == 'v' || c == 'w' || c == 'x' || c == 'y' || c == 'z') {
return 5;
} else if (c == 'p' || c == 'k' || c == 'g') {
return 6;
} else if (c == 'f' || c == 'h') {
return 7;
} else if (c == 'b' || c == 's') {
return 8;
}
return -1;
}
// 문자가 일치하는지 확인해주는 함수.
private static boolean strcheck(String s) {
if (s.equals("aespa")) {
return true;
} else if (s.equals("baekjoon")) {
return true;
} else if (s.equals("cau")) {
return true;
} else if (s.equals("debug")) {
return true;
} else if (s.equals("edge")) {
return true;
} else if (s.equals("firefox")) {
return true;
} else if (s.equals("golang")) {
return true;
} else if (s.equals("haegang")) {
return true;
} else if (s.equals("iu")) {
return true;
} else if (s.equals("java")) {
return true;
} else if (s.equals("kotlin")) {
return true;
} else if (s.equals("lol")) {
return true;
} else if (s.equals("mips")) {
return true;
} else if (s.equals("null")) {
return true;
} else if (s.equals("os")) {
return true;
} else if (s.equals("python")) {
return true;
} else if (s.equals("query")) {
return true;
} else if (s.equals("roka")) {
return true;
} else if (s.equals("solvedac")) {
return true;
} else if (s.equals("tod")) {
return true;
} else if (s.equals("unix")) {
return true;
} else if (s.equals("virus")) {
return true;
} else if (s.equals("whale")) {
return true;
} else if (s.equals("xcode")) {
return true;
} else if (s.equals("yahoo")) {
return true;
} else if (s.equals("zebra")) {
return true;
}
return false;
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 17070번 파이프 옮기기 1 (0) | 2024.09.15 |
---|---|
BEAKJOON / 백준 - JAVA 10703번 유성 (1) | 2024.09.14 |
BEAKJOON / 백준 - JAVA 1913번 달팽이 (0) | 2024.09.12 |
BEAKJOON / 백준 - JAVA 27952번 보디빌딩 (0) | 2024.09.11 |
BEAKJOON / 백준 - JAVA 25593번 근무 지옥에 빠진 푸앙이 (Small) (0) | 2024.09.10 |