소소한 개발이야기

[BOJ #8958번] OX퀴즈 본문

BOJ

[BOJ #8958번] OX퀴즈

plplim 2019. 3. 4. 00:00

[백준 온라인 저지] #8958번 (OX 퀴즈) 문제풀이



접근 방식은 문제를 연속으로 맞출 시 추가적으로 점수를 얻는 것만을 생각하면 된다. 


단순하게 접근을 하면 정답이냐(O), 오답이냐(X)이다. 그럼 여기서 연속정답은 어떻게 해결하면 좋을까??


나의 접근 방식은 문제 정답을 나타내는 변수를 따로 설정하고 문제를 맞출 시 + 1씩 카운팅 하였다. 만약 O일 경우 ++continuity를 해주고 X라면 continuity를 초기화 해준다. 이런 방식을 사용하면 배열을 돌면서 굳이 이 i - 1 번째 원소가 O였는지 확인을 하지 않아도 된다.


소스코드로 확인하면 더 쉽게 다가 올 것이다.


1
2
3
4
5
6
int continuity = 0;   // 'O'의 카운팅 값
if (str[index] == 'O') {
    sum += (++continuity);
else {
    continuity = 0;
}
cs


현재 index의 문자값만을 확인하고 총합인 sum에 더해준다. 만약 index - 1 번째 값이 'O' 였다면 continuity 값이 누적되어 있을 것이므로 굳이 if문을 통해 확인하지 않아도 된다.




전체 소스코드는 다음과 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 testCase = Integer.parseInt(br.readLine());
 
        for (int i = 0; i < testCase; i++) {
            char[] str = br.readLine().toCharArray();
            int len = str.length;
            int sum = 0, continuity = 0;
 
            for (int index = 0; index < len; index++) {
                if (str[index] == 'O') {
                    sum += (++continuity);
                } else {
                    continuity = 0;
                }
            }
 
            System.out.println(sum);
        }
 
    }
}
cs



더 좋은 방법이나 문제가 있는 부분 말씀해주시면 적극 반영하겠습니다.


전체 소스코드 및 다른 풀이를 보고 싶으신 분들은 Github에 놀러오셔서 확인하실 수 있습니다.



Github

https://github.com/seungrokoh/Beakjoon_OnlineJudge

'BOJ' 카테고리의 다른 글

[BOJ #2884번 JAVA] 알람 시계  (0) 2019.03.05
[BOJ #11718번 JAVA] 그대로 출력하기  (1) 2019.03.05
[BOJ #2490번 JAVA] 윷놀이  (0) 2019.03.05
[BOJ #10989번] 수 정렬하기 3  (0) 2019.02.28
[BOJ #1100번] 하얀 칸  (0) 2019.02.17
Comments