[Baekjoon] 1차원 배열 8958번: OX퀴즈

2019. 7. 15. 14:02
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.util.*;
 
public class Main {
       public static void main (String args[]) {
          
          String input;
          int count = 1//점수 세기
          int score = 0;
          char ox[] = new char[80];
 
          Scanner scan = new Scanner(System.in);
          int quiz = scan.nextInt();
          
          for(int j=0; j<quiz; j++) { //quiz개의 배열에 대해 실행
 
                input = scan.next();
               for(int i=0; i<input.length(); i++) {
                     if((input.charAt(i) == 'O'|| (input.charAt(i) == 'X')) { //O,X이면 처리
                         ox[i] = input.charAt(i);
                      } else if(input.charAt(i) == '\0'){ //엔터라면
                         ox[i] = '*';
                      }
               }
 
               //출력 확인 부분
             for(int i=0;i<input.length(); i++) {
                 if(ox[i] == 'O') { //만약 배열 안의 값이 O이면
                     System.out.println("O의 인덱스 값 :" + i);
                     score += 1//1점을 주고
                     if(i == input.length()) { //인덱스 값 넘어가면 안되니까 방지
                         break;
                     }
                     ++i;
                     while(ox[i] == 'O') { //연속된 O의 개수만큼
                         ++count; //초기값이 1이므로 증가하면 2
                         System.out.println("while문 통과, count값:" + count);
                         score += count; //1+2=3;
                         System.out.println("while문 통과, score값:" + score);
                         ++i; //다음 인덱스로 넘어가기
                         //다음 인덱스가 'O'가 아니라면 break
                         if(i == input.length()) { //인덱스 값이 넘어가면 안되니까
                             break;
                         }
                     }
                     count = 1;
                    
                 } else if(ox[i] == 'X') {
                    score += 0;
                 }
             }
             
             System.out.println("최종 값:" + score);
             score = 0//초기화
            
             
                  }
          }
      }
 

코드는 위와 같고 아래의 사진은 일일히 동작하는 모습을 보기 위해 sysout을 통해 알아본 바에 대한 결과이다. 그러나 왜인지 계속 틀렸다고 답이 나왔다. 아직 어느 부분이 결함인지 잘 모르겠다. 백준 커뮤니티에 질문을 해볼 예정이다. 그래서 검색 후에 다른 분의 코드를 참고한 후에 더 간결하게 코드를 줄일 수 있었다.

 

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.util.*;
 
public class Main {
    public static void main(String args[]) {
        
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        String ox[] = new String[num];
        
        for(int i=0; i<num; i++) {
            ox[i]= scan.next();
        }
        scan.close();
 
        int score, count;
        for(String oxString : ox) {
            score = 0;
            count = 0;
            for(int i=0; i<oxString.length(); i++) {
                if(oxString.charAt(i) == 'O') {
                    score += ++count;
                } else {
                    count = 0;
                }
            }
            System.out.println(score);
        }
 
    }
    
}
 
 
 

스캐너로 배열의 크기를 입력받은 다음, String 배열을 입력받은 크기만큼 만든다.

그다음 이 String 배열 안에 한줄씩 num만큼 입력을 받는다. 여기서 주의해야 할 점은 String 배열이므로 엔터나 스페이스바를 친 대로 배열에 문자열이 들어가게 된다. 이것을 하나씩 끊기 위해서 아래와 같은 문법을 쓴다.

for-each문: for(String oxString : ox) 이 부분이다.

 

이 부분에 대해 설명을 하자면, oxString이라는 이름의 String을 생성하고, 그 안에 ox[0], ox[1]...등 인덱스에 해당하는 문자열들을 차례대로 for문으로 불러와 쓰겠다는 뜻이다. 알고리즘 문제를 해결할 때 많이 쓰인다는데, 나는 알고리즘 초짜라 쓰는 경우를 잘 보지 못해서 조금 생소했지만 편리함을 알게 되었다.

 

또한 여기서 주요하게 쓰인 것들 중 charAt(int index)가 있다.

이것은 String의 인덱스에 접근해 하나의 char를 출력하게 해주는 것으로 문자열을 하나씩 분리할 경우 유용하게 쓰이는 것을 볼 수 있다. 앞으로 문자열에 관한 알고리즘 문제가 있다면 이것이 요긴하게 쓰일 예정이다.

BELATED ARTICLES

more