Java/백준
[8958] OX퀴즈
tmd1
2022. 6. 24. 21:28
문제:
https://www.acmicpc.net/problem/8958
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
코드:
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int num = sc.nextInt(); // 퀴즈 개수
String [] OX = new String[num]; // ox 퀴즈입력
int [] score = new int[num]; // 점수
for(int i=0;i<num;i++) {
OX[i] = sc.next(); // ox 퀴즈 입력
}
for(int j=0;j<OX.length;j++) {
char [] jd = new char[OX[j].length()];
int bonusSc = 1; // 연속되면 점수추가용
for(int k=0;k<OX[j].length();k++) {
jd[k] = OX[j].charAt(k);
} // 퀴즈 o,x 하나하나 char 변환
for(int l=0;l<jd.length;l++) {
if(jd[l] == 'O') {
score[j] += bonusSc; //'O'면 점수부여
if(l == jd.length-1) {
break; // 인덱스 범위 벗어남 방지
}
if(jd[l] == jd[l+1]) {
bonusSc++; //'O' 연속이면 점수추가
}else {
bonusSc =1; // 아닐시 보너스 점수 초기화
}
}
}
}
for(int m=0;m<score.length;m++) {
System.out.println(score[m]);
}
}
}
OX 퀴즈를 입력받아 각각을 하나하나 O,X를 char 형으로 변환
그후 연속됨에 따라 점수를 더 추가하거나 초기화하거나 함
for(int j=0;j<OX.length;j++) {
char [] jd = new char[OX[j].length()];
int bonusSc = 1; // 연속되면 점수추가용
for(int k=0;k<OX[j].length();k++) {
jd[k] = OX[j].charAt(k);
} // 퀴즈 o,x 하나하나 char 변환
for(int l=0;l<jd.length;l++) {
if(jd[l] == 'O') {
score[j] += bonusSc; //'O'면 점수부여
if(l == jd.length-1) {
break; // 인덱스 범위 벗어남 방지
}
if(jd[l] == jd[l+1]) {
bonusSc++; //'O' 연속이면 점수추가
}else {
bonusSc =1; // 아닐시 보너스 점수 초기화
}
}
}
}
j가 반복될 때 마다 bonusSc를 1로 초기화하는데 이는 하나의 OX 퀴즈 점수 판정이 끝났을 경우
설정된 bonusSc가 다음 OX퀴즈에 적용되는 것을 막기 위함이다.
만약 첫 번째 OX퀴즈 'OOXXOXXOOO' 의 점수를 매긴 뒤 bonusSc == 4 로 설정되어있다.
이는 다음 퀴즈인 'OOXXOOXXOO'에 점수를 매길 때도 적용되기에 퀴즈가 바뀔 때 마다 점수를 초기화 한 것.
좀 어렵게 푼거 같기도