반응형
문제(출처)
"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
내 풀이
package date_20181220;
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;
public class BOJ_9858 { public static void main(String args[]) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));// 5// OOXXOXXOOO// OOXXOOXXOO// OXOXOXOXOXOXOX// OOOOOOOOOO// OOOOXOOOOXOOOOX// int num = 5;// String[] testCase = new String[num]; // testCase[0] = "OOXXOXXOOO";// testCase[1] = "OOXXOOXXOO";// testCase[2] = "OXOXOXOXOXOXOX";// testCase[3] = "OOOOOOOOOO";// testCase[4] = "OOOOXOOOOXOOOOX"; try { int num = Integer.parseInt(br.readLine());// OX를 입력 할 양을 정하는 숫자를 입력 받습니다. String[] strOx = new String[num];// OX를 입력 받을 배열을 선언합니다. for (int i = 0; i < num; i++) { strOx[i] = br.readLine();// 입력 할 양 만큼 반복하여 OX를 입력 받아 배열에 저장합니다. }
for (int i = 0; i < num; i++) { bw.write(String.valueOf(countOX(strOx[i])));// countOX 함수로 OX를 전달하고 반환되는 정수를 출력합니다. bw.newLine(); } bw.flush(); bw.close(); } catch (NumberFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
private static int countOX(String strOX) { int checkO = 0;// O의 개수를 저장 할 변수를 선언합니다. int sum = 0;// 총 점수를 저장 할 변수를 선언합니다. for (int i = 0; i < strOX.length(); i++) {// 전달 받은 OX 길이만큼 반복합니다. if (strOX.charAt(i) == 'O') {// 한 문자가 'O'와 같다면 check변수를 증분합니다. checkO++; sum += checkO;// 증분한 checkO변수를 총 점수에 더합니다. } else { checkO = 0;// 한 문자가 'X'이면 checkO를 0으로 초기화합니다. } } return sum; }}
package date_20181220;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class BOJ_9858 {
public static void main(String args[]) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 5
// OOXXOXXOOO
// OOXXOOXXOO
// OXOXOXOXOXOXOX
// OOOOOOOOOO
// OOOOXOOOOXOOOOX
// int num = 5;
// String[] testCase = new String[num];
// testCase[0] = "OOXXOXXOOO";
// testCase[1] = "OOXXOOXXOO";
// testCase[2] = "OXOXOXOXOXOXOX";
// testCase[3] = "OOOOOOOOOO";
// testCase[4] = "OOOOXOOOOXOOOOX";
try {
int num = Integer.parseInt(br.readLine());
// OX를 입력 할 양을 정하는 숫자를 입력 받습니다.
String[] strOx = new String[num];
// OX를 입력 받을 배열을 선언합니다.
for (int i = 0; i < num; i++) {
strOx[i] = br.readLine();
// 입력 할 양 만큼 반복하여 OX를 입력 받아 배열에 저장합니다.
}
for (int i = 0; i < num; i++) {
bw.write(String.valueOf(countOX(strOx[i])));
// countOX 함수로 OX를 전달하고 반환되는 정수를 출력합니다.
bw.newLine();
}
bw.flush();
bw.close();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static int countOX(String strOX) {
int checkO = 0;
// O의 개수를 저장 할 변수를 선언합니다.
int sum = 0;
// 총 점수를 저장 할 변수를 선언합니다.
for (int i = 0; i < strOX.length(); i++) {
// 전달 받은 OX 길이만큼 반복합니다.
if (strOX.charAt(i) == 'O') {
// 한 문자가 'O'와 같다면 check변수를 증분합니다.
checkO++;
sum += checkO;
// 증분한 checkO변수를 총 점수에 더합니다.
} else {
checkO = 0;
// 한 문자가 'X'이면 checkO를 0으로 초기화합니다.
}
}
return sum;
}
}
내 풀이 해석
String 배열로 테스트 케이스를 저장합니다.
countOX 함수로 하나의 배열을 전달하고 함수에서 'O'가 있는지 한 문자씩 확인합니다.
같다면 checkO를 1씩 증분하고 sum값에 더하고 반환합니다.
반응형
'개발(합니다) > 알고리즘&코테' 카테고리의 다른 글
알고리즘 단계별로 풀어보기 : BOJ-10039(평균점수) (0) | 2018.12.21 |
---|---|
알고리즘 단계별로 풀어보기 : BOJ-2920(음계) (0) | 2018.12.20 |
알고리즘 단계별로 풀어보기 : BOJ-2577(숫자의개수) (0) | 2018.12.20 |
알고리즘 단계별로 풀어보기 : BOJ-1152(단어의개수) (0) | 2018.12.20 |
알고리즘 단계별로 풀어보기 : BOJ-2448(별찍기 [11]) (0) | 2018.12.19 |