문제 설명이 이상해서 정답 비율이 낮은 것이 보이는데, 설명만 보완하면 정말 간단한 문제다. 먼저 입력으로는 들어올 문자의 길이와 문자가 나오는데 문자는 1~9의 숫자와, L, R, S, K 네 문자로 이루어져 있고 숫자의 경우에는 그냥 세면 되지만 문자의 경우에는 LR, SK 조합이 되어야 카운트 하나로 친다.
여기서 가장 설명이 부실한 부분이 조합이 잘못되었을 경우 바로 중단시키는 부분인데, LSRK와 같이 이전에 L 혹은 S가 나왔을 경우 조합이 꼬여도 에러가 아닌 진행이 가능하고
에러가 발생하는 경우는 R 혹은 K가 나왔는데 이전에 L, R이 하나도 나오지 않은 경우에만 에러가 발생하기 때문에, 이걸 기억해야 에러 없이 문제를 풀 수 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
char[] charArray = br.readLine().toCharArray();
int counter = 0;
int lCnt = 0;
int sCnt = 0;
for (int i = 0; i < count; i++) {
if (Character.isDigit(charArray[i])) {
counter++;
} else {
if (charArray[i] == 'L') {
lCnt++;
} else if (charArray[i] == 'S') {
sCnt++;
} else if (charArray[i] == 'R') {
if (lCnt <= 0) {
break;
} else {
lCnt--;
counter++;
}
} else if (charArray[i] == 'K') {
if (sCnt <= 0) {
break;
} else {
sCnt--;
counter++;
}
}
}
}
System.out.println(counter);
}
}
문제를 풀어보자면, 받은 문자열을 Character로 쪼개준 후 숫자면 그냥 카운트를 올려주고, L과 S의 경우에는 따로 변수를 만들어준 뒤 나올 때마다 횟수를 더해주고 있다가
이후 R과 K가 나오게 되면 변수에서 -1을 빼면서 카운트를 해 주면 되고, 만약 L 혹은 S가 이전에 나오지 않았었다면 그대로 break 후 카운트한 수를 리턴해주면 끝난다
Leave a Reply