문자열 8958

0

코딩테스트

목록 보기
7/11

이 글의 목표

정답은 구글링 하면 나온다.
중요한 것은 내가 짰던 코드의 문제점을 인식하고 이를 해결해 나가는 과정을 글로 정리하여 장기기억으로 남기고자 한다.
천천히 그러나 확실히.

풀이과정

우선 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를 정확하게 짚고 햇갈렸던 부분을 정확히 짚고 넘어가 뿌듯하고 앞으로 나와도 틀리지 않을 거라는 자신감이 생겼다.

profile
끊임없이 질문을 던지고 크게 생각하자.

0개의 댓글