본문 바로가기

건승하고있어요/알고리즘

[1차배열] OX 퀴즈

반응형

문제: "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고 X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제가지 연속된 O개의 개수가 된다. 예를 들어 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3=10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

(출처: https://www.acmicpc.net/problem/8958)


입력:첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.


저 "각 테스트는 한 줄로 이루어져 있고" 를 이해 못해서 계속 헤맨 문제. 

입력 자체를 한 줄로 하라는 말이었다... 아항... 쫘증


for(int i=0 ; i<=C ; i++) {
            String s = scan.nextLine();
            char [] ox = s.toCharArray();
            for(int j=0 ; j<ox.length ; j++) {
                if(ox[j] == 'O') {
                    no++;
                    cnt = 1*no;
                    cnt2 = cnt2+cnt;
                } else if (ox[j] == 'X') {
                    cnt = 0;
                    no = 0;
                }
            }


scanner 두개 받아도 상관 없는데, 여기서는 두개 선언하면 런타임이 났다.

그래서 우선 scanner는 한개 선언하고 int와 String 둘 다 모두 받았다. 

그렇게 되면 위에서 받은 N도 for문을 거치게 되는데, 그렇게 되면 케이스를 한 번 덜 돌리게 돼서 i<=C번 돌렸다. 

이번에도 굉장히 직관적으로....ㅋㅋㅋㅋㅋㅋ 풀었다. 두번째, 세번째 O가 들어온걸 어떻게 알 수 있을까 고민하다가 

변수를 하나 선언해서 몇번 째 들어오는지를 그냥 체크했다. 그러고 나서 cnt랑 곱해서 그걸 더했다. 흠 근데 그렇게 할 필요가 있었나

그리고 X가 나오면 모든 변수를 초기화 시켰다. 


 if(i!=0)
                System.out.println(cnt2);
                cnt2 = 0;
                no = 0;
                cnt = 0;
        }


이게 나온 이유는 scanner를 같이 받다 보니 필요없는 0이 계속 출력되길래..

출력되면 또 틀렸다고 할까봐...ㅋㅋㅋㅋ 그리고 모든 변수 초기화 


어제  4시 30분에 자서 오늘 8시에 일어났더니 졸려서 아무것도 못하겠다.

하지만 지금 자면 또 새벽에 잘테니 잘 수도 없고 ㅠ_ㅠ

이거 푸는데도 너무 졸려서 죽을 뻔 했네ㅠ_ㅠ 으앙


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 OX {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int C = scan.nextInt();
        int cnt = 1;
        int cnt2 = 0;
        int no = 0;
        for(int i=0 ; i<=C ; i++) {
            String s = scan.nextLine();
            char [] ox = s.toCharArray();
            for(int j=0 ; j<ox.length ; j++) {
                if(ox[j] == 'O') {
                    no++;
                    cnt = 1*no;
                    cnt2 = cnt2+cnt;
                } else if (ox[j] == 'X') {
                    cnt = 0;
                    no = 0;
                }
            }
            if(i!=0)
                System.out.println(cnt2);
                cnt2 = 0;
                no = 0;
                cnt = 0;
        }
        scan.close();
    }
 
}
 
cs








반응형

'건승하고있어요 > 알고리즘' 카테고리의 다른 글

[1차배열] 평균점수  (4) 2018.02.16
[1차배열] 음계  (0) 2018.02.15
[if] 더하기 사이클  (3) 2018.02.12
[if] 평균은 넘겠지 / printf() 메소드 정리  (2) 2018.02.11
[for] 2007년 달력문제  (0) 2018.02.08