728x90
문제
https://www.acmicpc.net/problem/8958
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
해결
OX퀴즈 결과의 점수를 계산하려면 점수를 매기는 패턴부터 파악해야 한다.
ex) OOXXOXXOOO : 1+2+0+0+1+0+0+1+2+3 = 10점
O : 문제를 맞음
X : 문제를 틀림
문제를 연속으로 맞을 시 점수가 1점씩 증가하며 축적된다.
문제를 틀릴 시 점수를 받지 못하고 (0점) 다음에 문제를 연속으로 맞히더라도 다시 1점부터 증가한다.
이중반복문(nested loop)을 작성하고, index로 주어진 값에 해당하는 문자를 리턴하는 charAt(index) 메서드를 활용해 문제를 해결하였다.
구현
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
28
29
|
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int t = sc.nextInt(); // 테스트 케이스의 개수 입력받음
String[] ox = new String[t]; // 테스트 케이스의 수만큼 OX퀴즈 결과를 저장할 배열 선언
for (int i = 0; i < t; i++) {
ox[i] = sc.next(); // OX퀴즈 결과(O와 X만으로 이루어진 문자열)을 배열에 입력받음
}
int[] res = new int[ox.length]; // OX퀴즈 결과의 수만큼 각각의 총점을 저장할 배열 선언
for (int i = 0; i < ox.length; i++) { // OX퀴즈 결과의 수만큼 for문 실행
int o = 0; // 문자열이 'O'일 때 (퀴즈를 맞혔을 때) 증가하는 점수를 저장할 변수를 선언하고 0으로 초기화
for (int j = 0; j < ox[i].length(); j++) { // 각각의 OX퀴즈 결과만큼 for문 실행
if (ox[i].charAt(j) == 'O') { // i번째 OX퀴즈 결과의 j번째 문자가 'O'이면 (문제를 맞혔으면)
o++; // 점수가 증가한다 (연속으로 문자열이 'O'이면 1점씩 계속 증가한다)
res[i] += o; // 증가한 점수를 OX퀴즈 총점 배열에 저장
} else if (ox[i].charAt(j) == 'X') { // i번째 OX퀴즈 결과의 j번째 문자열이 'X'이면 (문제를 틀렸으면)
o = 0; // 점수를 0으로 초기화 (문제를 틀린 다음 연속으로 문제를 맞히면 다시 1점부터 점수가 증가한다)
}
}
System.out.println(res[i]);
}
}
}
|
cs |
결과
728x90
'Algorithm > Beakjoon' 카테고리의 다른 글
[Java] baekjoon 2941 : 크로아티아 알파벳 / 문자열 (0) | 2021.08.30 |
---|---|
[Java] baekjoon 4344 : 평균은 넘겠지 / 1차원 배열 (0) | 2021.08.28 |
[Java] baekjoon 3052 : 나머지 / 1차원 배열 (0) | 2021.08.26 |
[Java] baekjoon 15552 : 빠른 A+B / for문 (0) | 2021.08.25 |
[Java] baekjoon 11022 : A+B - 8 / for문 (0) | 2021.08.24 |
댓글