알고리즘 및 자료구조/백준(BackJoon)

백준 - 8958 번

지팡구 2022. 8. 9. 04:10

https://www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수

www.acmicpc.net

 

설명 : 

첫 줄에는 테스트 케이스가 주어지고, 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열을 O와 X으로만 이루어져있다. 이 문자열속 O는 각 1점인데, 연속으로 맞을 경우 1점씩 더 추가된다. ex) oooooxxx = 15점// oxoxoxoxo = 5점

 

문제에서 주어진대로 접근하면 될 것 같아 크게 문제가 없다고 생각했다. 그러나 내 생각과 실제 코드 작성과는 거리가 멀었고, 내가 간과한 부분이 있었다. 어떻게 앞 뒤 문자를 구분할 것인지에 대해 도무지 생각이 나지 않았다. 또한 코드를 작성하면서 줄 단위로 무언가를 입력받는 부분이 아직 미숙하다고 생각이 들었다.

 

내가 작성한 코드는 다음과 같다.

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int A = Integer.parseInt(br.readLine());
        String [] arr = new String[A];
        StringBuilder sb = new StringBuilder();

        for(int i=0; i<A; i++) {
            arr[i]= br.readLine();
        }

        for(int a= 0; a<A; a++){
            int count=0;
            int sum=0;
            for(int j=0; j<arr[a].length(); j++){
                if(arr[a].charAt(j)=='O'){
                    count++;
                }else{
                    count=0;
                }
                sum=sum+count;
            }
            sb.append(sum+"\n");
        }
        System.out.println(sb);

1. 입출력을 위한 bufferedReader 함수 사용 및 테스트 케이스의 입력

2. 테스트 케이스를 바탕으로 String 배열의 크기 결정 및 해당 문제에서 점수를 저장하기 위해 StringBuilder 사용

 

본격적으로 코드를 확인해보면 띄어쓰기가 필요없기에 일반 입력으로 O 또는 X를 입력받는다.

(이러한 과정을 배열의 크기만큼 입력 받는다)

ex) arr[0] = xoxoxoxoxoxoxo

      arr[1] = ooooxxxoxoxoxoo  -- 이런방식으로 입력 받는다.

 

그 후 본격적으로 해당 문제를 풀기위한 핵심부인데, 방법은 간단하다.

arr[] 배열 속 첫 번째 문자부터 문자가 O라면 count를 +1 하고, 아니라면 0으로 되돌리는데, 이 때 연속될 경우 계속해서 1씩 증가한다. 내가 간과한 사실은 바로 여기였다.(charAt()함수 사용) 이 방법을 떠올리지 못했다는 점이 좀 아쉽다...

 

그 후 sum에 count 와 sum을 계속해서 더하고 반복문이 한 싸이클이 돌때 앞서 선언한 StringBuilder을 이용해서 점수를 저장하게 된다. 그 후 마지막으로 출력하면 문제를 해결할 수 있었다.

 

회고 : 

이 문제뿐만아니라 이 단원의 문제를 해결하면서 느낀점은 내 생각을 코드로 구현하는 능력이 아직 미흡하고, 입력받을 때 띄어쓰기라던지, 여러 줄의 케이스를 입력 받는 부분에 있어서 이해가 조금 느리다는점을 몸소 느끼고 있다.

 

이 단원이 끝나면 입력에 대한 이해를 조금 더 한 후 다음 단원으로 넘어가도록 해야겠다..

 

'알고리즘 및 자료구조 > 백준(BackJoon)' 카테고리의 다른 글

백준 - 3052번  (0) 2022.08.08
백준 - 1546번  (0) 2022.08.07
백준 - 2577번  (0) 2022.08.05
백준 -2562번  (0) 2022.08.05
백준 - 10818번  (0) 2022.08.05