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'에 점수를 매길 때도 적용되기에 퀴즈가 바뀔 때 마다 점수를 초기화 한 것.

좀 어렵게 푼거 같기도