728x90
문제
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.
출력
각 테스트 케이스마다 점수를 출력한다.
예제입력 |
예제출력 |
5 OOXXOXXOOO OOXXOOXXOO OXOXOXOXOXOXOX OOOOOOOOOO OOOOXOOOOXOOOOX |
10 9 7 55 30 |
문제풀이
어떤 풀이방법이 있을까? 생각을 했을 때, CharAt 방법과 미리 split을 통해 배열로 값을 나누는 것이 떠올랐다.
split 방법으로 진행을 했고 "O"일때와 "X"일때 또는 마지막 끝나기 전에 O가 진행되었을 경우의 값까지 고려하여 계산하도록 했다.
import java.io.*;
class Main{
public static int oResult(String[] arr){
int result = 0;
int init = 0;
for(int i = 0; i < arr.length; i++){
String data = arr[i];
if(data.equals("O")){
init++;
}
if(data.equals("X") || i == arr.length -1){
int sum = 0;
for(int j = 0; j < init; j++){
sum = sum + j + 1;
}
result += sum;
init = 0;
}
}
return result;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for(int i = 0; i < N; i++){
String ox = br.readLine();
int result = oResult(ox.split(""));
System.out.println(result);
}
}
}
728x90
'Etc > problem solving' 카테고리의 다른 글
백준 15596, 정수 N개의 합 (0) | 2021.10.10 |
---|---|
백준 4344, 평균은 넘겠지 (0) | 2021.10.10 |
백준 1546, 평균 (0) | 2021.10.10 |
백준 3052, 나머지 (0) | 2021.10.10 |
백준 2577, 숫자의 개수 (0) | 2021.10.09 |