문자열 8958

0

코딩테스트

목록 보기
7/15

이 글의 목표

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

풀이과정

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

0개의 댓글