728x90
반응형
2024.05.08기준 - 실버5
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
저는 주어진 평가를 하나씩 살펴보면서 변환을 수행하고, 마지막 평가가 +, -, 0로 끝나지 않을 경우 추가적인 변환을 수행하도록 코드를 작성해봤습니다.
변환은 change코드 내에서 전부 처리하는 방식을 선택했습니다.
이 문제의 중요한 점이라고 생각하는 것은 A0,B0, C0가 A, B, C로 표기 될 수 있다는 것인데,
저는 이 점을 무조건 A, B, C라고 처리를 하고 풀어봤습니다.
- next 변수에 +, - 가 들어오면 현재 참조하는 변수와 더해 문자열을 생성했습니다.
- next 변수에 0가 들어오면 0는 무시하고 현재 참조하는 변수만 문자열로 생성했습니다.
반복문에서 i보다 +1을 참조하다 보니 마지막 변수가 평어이면,
참조하지 않는 문제가 발생했습니다.
그래서 boolean 변수를 생성해 배열에 마지막 변수가 평어인지를 먼저 판단을 해 계산을 해주었습니다.
코드
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();
int n = Integer.parseInt(br.readLine()); // 학기의 수
char[] str = br.readLine().toCharArray(); // 평어
boolean lastCheck = str[str.length - 1] == 'A' || str[str.length - 1] == 'B' || str[str.length - 1] == 'C' ? true : false; // 마지막이 +, 0, - 가 아니라면 true
String before = " "; // 이전 학기 평어
String nowStr = " "; // 현재 참조할 평어
char now = ' '; // A, B, C를 판단할 변수
char next = ' '; // +. -. 0를 판단할 변수
for (int i = 0; i < str.length - 1; i++) {
now = str[i];
next = str[i + 1];
if (next == '+' || next == '-') {
nowStr = String.valueOf(now) + String.valueOf(next);
i++;
} else if (next == '0') {
nowStr = String.valueOf(now);
i++;
} else {
nowStr = String.valueOf(now);
if (i == str.length - 2) {
lastCheck = true;
}
}
sb.append(change(nowStr, before));
before = nowStr; // 현재 평어를 이전 평어로 업데이트
}
if (lastCheck) { // 마지막 평어가 +, -, 0가 아니라면 한번 더 변환
sb.append(change(String.valueOf(str[str.length - 1]), before));
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
// 새로운 평어로 변환해줄 함수.
private static char change(String s, String b) {
if (s.charAt(0) == 'C') {
return 'B';
} else if (s.equals("B") || s.equals("B-")) {
if (b.charAt(0) == 'C' || b.equals(" ")) {
return 'D';
} else {
return 'B';
}
} else if (s.equals("A-") || s.equals("B+")) {
if (b.equals("B+") || b.charAt(0) == 'A') {
return 'D';
} else {
return 'P';
}
} else if (s.equals("A")) {
if (b.equals("A+") || b.equals("A")) {
return 'P';
} else {
return 'E';
}
} else {
return 'E';
}
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 11053번 가장 긴 증가하는 부분 수열 (0) | 2024.05.10 |
---|---|
BAEKJOON / 백준 - JAVA 10833번 사과 (0) | 2024.05.09 |
BAEKJOON / 백준 - JAVA 9506번 약수들의 합 (0) | 2024.05.08 |
BAEKJOON / 백준 - JAVA 31796번 한빛미디어 (Easy) (0) | 2024.05.07 |
BAEKJOON / 백준 - JAVA 31797번 아~파트 아파트 (0) | 2024.05.07 |