알고리즘/백준(BAEKJOON)

1차원 배열 8958/자바/Scanner/BufferReader

jojelly 2021. 8. 21. 23:32
반응형

https://www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수

www.acmicpc.net

 

 

 

 주의할 점

  1. 각 케이스마다 점수를 출력한다(println).
  2. O 의 연속수 만큼 점수를 누적하여 합산하고 X가 나오면 누적값은 0으로 초기화 된다.
  3. 문자열 O X 이기 떄문에 배열은 String 이다.

 

방법1

 

Scanner를 이용하기

 

1.for문 이용

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
30
31
32
33
import java.util.Scanner;
 
public class Array8958 {
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
 
        int N = sc.nextInt();
        String [] arr = new String[N];
 
 
        for (int i = 0; i<arr.length; i++){
            arr[i] = sc.next();
        }
        sc.close();
 
        for (int i =0; i<arr.length; i++){
            int plus = 0;
            int sum = 0;
            for (int j = 0; j<arr[i].length(); j++){
                if (arr[i].charAt(j)=='O'){
                    plus++;
                }
                else {
                    plus = 0;
                }
                sum += plus;
            }
            System.out.println(sum);
        }
    }
}
 
cs

 2. for each문 이용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
        for (String s : arr) {
            int plus = 0;
            int sum = 0;
            for (int j = 0; j < s.length(); j++) {
                if (s.charAt(j) == 'O') {
                    plus++;
                } else {
                    plus = 0;
                }
                sum += plus;
            }
            System.out.println(sum);
        }
 
cs

 


BufferReader이용하기

 

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
30
31
32
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Array8958BufferReader {
    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<arr.length; i++){
            arr[i] = br.readLine();
        }
 
        for (String s : arr) {
            int plus = 0;
            int sum = 0;
            for (int j = 0; j < s.length(); j++) {
                if (s.charAt(j) == 'O') {
                    plus++;
                } else {
                    plus = 0;
                }
                sum += plus;
            }
            System.out.println(sum);
        }
    }
}
 
cs

 

-일단 케이스의 갯수를 받은 후 arr의 길이로 지정해준다.

-각 케이스는 OX로 이루어져 있기때문에 arr을 String 타입의 배열에 각각의 원소에 문자열을 저장해준다.

-이후 이중 for문을 이용하는데 큰 for문이 각 케이스를 한바퀴 돌고 작은 for문이 각 케이스의 문자열을 하나씩 돌게된다. 

-if문을 이용해 각 문자열이 O와 맞는지 비교한 후 O일 경우 plus값을 1씩 증가  X일 경우 다시 plus값은 0으로 초기화되며 연속된plus값은 sum에 누적되어 출력해준다.

반응형