[백준] 8958 - OX퀴즈 - JAVA[자바]
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String arr[] = new String[N];
for (int i = 0; i < N; i++){
arr[i] = br.readLine();
}
for (int i = 0; i < N; i++){
int series = 0;
int score = 0;
for(int j=0; j<arr[i].length(); j++){
if(arr[i].charAt(j) == "O"){
series++;
} else{
series = 0;
}
score += series;
}
System.out.println(score);
}
}
}
위의 코드는 arr[i].charAt(j) == "O" 의 따옴표를 ""쌍따옴표로 썼기때문에 에러가 난다.
'' 로 바꿔주는 것 잊지 말자
1. 먼저 String 배열 arr[] 의 각각의 원소에 문자열을 저장해준다.
그리고 series 는 몇 번 연속했는지,
score는 누적 합산 값을 나타내는 변수로 선언을 해준다.
그리고 그 안에 for문으로 한 원소당 String 의 길이만큼 반복하여 해당 원소의 문자열을 charAt() 메소드를 통해 하나하나 검사한다.
그 과정에서 만약 O 라는 문자가 나타나면 cnt 을 1 증가시키고 아닐경우는 X 문자이니 cnt 를 0 으로 초기화 시켜준다.
그렇게 하여 sum에 cnt 값을 누적하여 더해준 뒤 해당 배열 원소의 문자열을 다 검사하고나면 sum 을 출력해주면 된다.
배열을 사용하지 않는 방법
위에서는 String이라는 배열을 사용했지만,
getBytes() 메소드와 for-each 문을 쓰면 매우 쉽고 간결한 코드가 될 수 있다.
getBytes() 메소드는 입력 문자열을 byte 단위의 배열로 반환시켜주는 메소드다.
그리고 '배열'로 반환을 하므로 for-each 문에서도 쓸 수 있다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine()); // 테스트 케이스
for (int i = 0; i < N; i++) {
int series = 0; // 연속횟수
int score = 0; // 누적 합산
for (byte value : br.readLine().getBytes()) {
if (value == 'O') {
series++;
score += series;
}
else {
series = 0;
}
}
sb.append(score).append('\n');
}
System.out.println(sb);
}
}
for( byte value : br.readLine().getBytes() )
=> for-each 구문으로, br.readLine()으로 한 줄의 문자열을 입력받는다.
.getBytes()는 입력받은 문자열을 byte형 배열로 반환한다.
즉, for-each문은 입력을 한 줄 받으면
"해당 문자열의 길이만큼 반복하면서 해당 문자열의 문자를 하나씩 value에 저장하여 꺼내온다."
1번째 : for-each + .getBytes() 이용
2번째 : BufferedReader + StringBuilder 이용
3번째 : BufferedReader + println 이용.