Recent Posts
소소한 개발이야기
[BOJ #8958번] OX퀴즈 본문
[백준 온라인 저지] #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
'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