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퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
풀이
문제를 연속으로 맞히면 점수를 추가로 획득하는 조건에 맞추어 총점을 출력하는 문제이다.
String 배열을 사용해서 풀어도 되지만, 배열을 사용하지 않고도 해결할 수 있어서 배열을 사용하지 않았다.
방법은 다음과 같다.
1. OX퀴즈의 결과를 입력받는다. (quiz : OX퀴즈의 결과, br : BufferedReader 클래스 객체
String quiz = br.readLine();
2. 문제를 맞았을 때 획득하는 점수와, 총점을 넣을 변수를 선언한다. (tmp : 문제를 맞았을 때 획득하는 점수, sum : 총점)
int tmp = 0;
int sum = 0;
3. 문자열의 길이만큼 반복문을 실행한다.
for(int j = 0; j < quiz.length(); j++) {
3-1. 한 글자씩 검사해서 'O'이면 획득하는 점수를 1 증가시킨다.
if(quiz.charAt(j) == 'O') tmp++;
3-2. 'X'이면 획득하는 점수에 0을 대입한다.
else tmp = 0;
3-3. 총점에 획득 점수를 더한다.
sum += tmp;
3-1 과정에서, 연속으로 정답을 맞혔을 경우('O'가 연속으로 입력된 경우) 획득하는 점수를 구할 수 있다.
'O'가 입력될 때마다 1씩 더해주기 때문이다.
코드
BufferedReader 클래스와 StringBuilder 클래스를 이용한 코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int num = Integer.parseInt(br.readLine());
for(int i = 0; i < num; i++) {
String quiz = br.readLine();
int tmp = 0;
int sum = 0;
for(int j = 0; j < quiz.length(); j++) {
if(quiz.charAt(j) == 'O') tmp++;
else tmp = 0;
sum += tmp;
}
sb.append(sum).append("\n");
}
System.out.println(sb);
}
}
틀린 부분이 있다면 정정해 주시면 감사하겠습니다.
궁금한 부분이 있거나, 다른 아이디어가 있으시면 자유롭게 댓글 남겨주세요!
'[JAVA]백준 알고리즘 > 기타' 카테고리의 다른 글
[JAVA]백준 알고리즘 15596번 : 정수 N개의 합 (2) | 2023.01.08 |
---|---|
[JAVA]백준 알고리즘 4344번 : 평균은 넘겠지 (2) | 2023.01.07 |
[JAVA]백준 알고리즘 1110번 : 더하기 사이클 (0) | 2023.01.05 |
[JAVA]백준 알고리즘 25083번 : 새싹 (0) | 2022.12.30 |
[JAVA]백준 알고리즘 3003번 : 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2022.12.30 |