본문 바로가기

알고리즘/백준

[8958]OX퀴즈

수행일자 : 2021.08.01


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

 

8958번: OX퀴즈

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

www.acmicpc.net


문제

  • "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다.
  • 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다.
  • 예를 들어, 10번 문제의 점수는 3이 된다.
  • "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
  • OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

입력

  • 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 
  • 문자열은 O와 X만으로 이루어져 있다.

출력

  • 각 테스트 케이스마다 점수를 출력한다.

입출력 예제


BufferedReader 를 사용하여 풀어보려고 한다.

 

선언할 변수는 다음과 같다.

  • 테스트 케이스를 입력받을 변수 [ T ]
  • O/X 를 저장할 String 배열 [ arr ]
  • O가 연속된 횟수를 저장할 변수 [ count ]
  • 결과값을 저장할 변수 [ result ]
  • BufferedReader 변수 [ br ]
  • StringBuilder 변수 [ sb ]

변수 [ T ] 와 [ arr ] 를 선언하고 for 문을 돌려서 [ arr ] 배열에 입력한 O/X 값을 넣어준다.

값을 넣는 for 문이 끝난 후에 새로운 for문을 생성하여 [ count ] 와 [ result ] 변수를 선언 및 초기화 해준다.

  • 해당 두 변수를 for 문 안에서 초기화하는 이유는 for 문이 도는 각 루프마다 두 변수 값이 누적되지 않고 초기화되어야 정상적인 값이 출력되기 때문이다.

해당 for 문 안에 j 부터 arr[i] 배열의 길이만큼 돌며 반복되는 횟수를 저장해주는 for 문을 추가로 작성한다.

  • 배열의 길이만큼 돌려야 하는 이유는 입력받은 O/X의 길이만큼 돌아야 하기 떄문이다.

그 안에 if - else 문과 charAt()을 사용하여 배열에 있는 값 중에 O가 있으면 count 를 더해주고 업으면 0으로 초기화해주도록 한다.

  • charAt() 이란 String 으로 저장된 문자열 중에서 입력받은 index의 위치에 있는 문자를 추출하는 함수이다.

count 횟수를 누적한 후에 결과값인 result에 count 변수를 더해준다.

그리고 나서 안쪽의 for 문을 빠져나와 결과값과 개행문자(\n)을 통해 StringBuilder 변수인 [ sb ] 에 결과값을 저장한다.

마지막으로 [ sb ] 를  출력한다.

답안 소스

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));
		
		StringBuilder sb = new StringBuilder();
		
		int T = Integer.parseInt(br.readLine());
		String[] arr = new String[T];
		
		
		for(int i=0; i<T; i++) {
			arr[i] = br.readLine();
		}
		
		for(int i=0; i<T; i++) {
			
			int count = 0;
			int result = 0;
			
			for(int j=0; j<arr[i].length(); j++) {
				
				if(arr[i].charAt(j) == 'O') {
					count++;
				}else {
					count = 0;
				}
				result += count;
			}
			sb.append(result).append("\n");
		}
		System.out.println(sb);
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

[15596]정수 N개의 합  (0) 2021.08.04
[4344]평균은 넘겠지  (0) 2021.08.01
[1546]평균  (0) 2021.08.01
[3052]나머지  (0) 2021.07.27
[2577]숫자의 개수  (0) 2021.07.25