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
소스코드
// 방법1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // case 개수
String arr[] = new String[N];
// testCase 입력
for (int i = 0; i < N; i++) {
arr[i] = sc.next();
}
sc.close();
for (int i = 0; i < N; i++) {
int score = 0; // 획득 점수
int total = 0; // 총 점수
for (int j = 0; j < arr[i].length(); j++) {
if (arr[i].charAt(j) == 'O') { // 맞혔을경우 1점씩 증가
score += 1;
} else { // 틀렸을경우 연속점수 0으로 초기화
score = 0;
}
total += score;
}
System.out.println(total);
}
}
}
// 방법2
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // case 개수
String arr[] = new String[N];
// testCase 입력
for (int i = 0; i < N; i++) {
arr[i] = br.readLine();
}
for (int i = 0; i < N; i++) {
int score = 0; // 획득 점수
int total = 0; // 총 점수
for (int j = 0; j < arr[i].length(); j++) {
if (arr[i].charAt(j) == 'O') { // 맞혔을경우 1점씩 증가
score ++;
} else { // 틀렸을경우 연속점수 0으로 초기화
score = 0;
}
total += score;
}
System.out.println(total);
}
}
}
// 방법3
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder(); //StringBuilder 추가
int N = Integer.parseInt(br.readLine());
String arr[] = new String[N];
for (int i = 0; i < N; i++) {
arr[i] = br.readLine();
}
for (int i = 0; i < N; i++) {
int score = 0; // 획득 점수
int total = 0; // 총 점수
for (int j = 0; j < arr[i].length(); j++) {
if (arr[i].charAt(j) == 'O') {
score ++;
} else {
score = 0;
}
total += score;
}
sb.append(total).append('\n'); //StringBuilder에 저장
}
System.out.println(sb);
}
}
- 좀 더 빠른 실행을 위해 System.out.println() 을 반복하여 호출하지 않고 StringBuilder 를 이용하여 문자열을 이어준 뒤 한 번에 출력해준다
- StringBuilder 에 결과를 넣어주고 반드시 줄바꿈을 해준 뒤 저장한 후, 맨 마지막에 sb로 객체를 출력한다.
'Algorithm > Baekjoon (백준)' 카테고리의 다른 글
[백준][자바] 4344번_평균은 넘겠지 (0) | 2021.11.14 |
---|---|
[백준][파이썬] 4344번_평균은 넘겠지 (0) | 2021.11.14 |
[백준][파이썬] 8958번_OX퀴즈 (0) | 2021.11.13 |
[백준][자바] 1546번_평균 (0) | 2021.11.11 |
[백준][파이썬] 1546번_평균 (0) | 2021.11.11 |