정답은 구글링 하면 나온다.
중요한 것은 내가 짰던 코드의 문제점을 인식하고 이를 해결해 나가는 과정을 글로 정리하여 장기기억으로 남기고자 한다.
천천히 그러나 확실히.
우선 X 단위로 문자를 잘라서 O뭉텅이 만큼 계산하면 된다고 생각합과 동시에 cnt++등의 코드가 있으면 좋다고 생각했다. 하지만 잘 생각나지 않았다. 결국 약간의 도움을 받아 다음과 같이 코드를 설계했다.
import java.io.*;
class Main{
static int score;
static int arr[];
static int cnt;
public static void main(String[]args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // Test Case
score = 0;
cnt =0;
for(int i=0; i<T; i++){
String quiz = br.readLine();
arr = new int [quiz.length];
for(int j=0; j<quiz.length;j++){
arr[i] = quiz.charAt(j); // int형으로 배열을 선언했는데 char를 입력받고 있네?
if(arr[i] == O){
cnt++;
}
else
cnt=0;
score+=cnt;
}
System.out.println(score);
}
}
}
문제점
1. score와 cnt가 초기화되지 않아 출력결과가 누적되어 출력된다.
2. 배열을 int형으로 선언했는데 문자를 입력받고 있었다....
3. String의 길이측정 메소드는 length(), 배열은 length
4. 먼저 String 배열 arr 의 각각의 원소에 문자열을 저장해줄 필요가 있다.
import java.io.*;
class Main{
static String arr[];
static int score;
static int cnt;
public static void main(String[]args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
arr= new String[T];
for(int i=0; i<T;i++){
arr[i] = br.readLine();
}
for(int i=0; i<T; i++){
score=0;
cnt=0;
for(int j=0;j<arr[i].length();j++){
if(arr[i].charAt(j) == 'O'){
cnt++;
}
else{
cnt=0;
}
score+=cnt;
}
System.out.println(score);
}
}
}
기본적인 문제임에도 불구하고 시간이 걸리긴 했지만 fail point를 정확하게 짚고 햇갈렸던 부분을 정확히 짚고 넘어가 뿌듯하고 앞으로 나와도 틀리지 않을 거라는 자신감이 생겼다.