뻠삥

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

 

8958번: OX퀴즈

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

www.acmicpc.net

 

인풋을 배열로 입력받아 문자 'O'가 연속된 횟수를 더하는 문제입니다.

파이썬에서 list와 for는 떼려야 뗄 수 없는 관계라는걸 다시 한 번 생각하게된 문제였습니다.

문제 풀이는 아래와 같습니다.

 

1. Java

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.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int cntLoop = Integer.parseInt(br.readLine());
        for (int i = 0; i < cntLoop; i++) {
            char[] arrChar = br.readLine().toCharArray();
            int score = 0;
            int cntContinuity = 0;
            
            for (int j = 0; j < arrChar.length; j++) {
                if (arrChar[j] == 'O') {
                    cntContinuity++;
                    score += cntContinuity;
                    
                } else {
                    cntContinuity = 0;
                }
            }
            
            bw.write(score + "\n");
        }
        
        bw.close();
        br.close();
    }
}
cs

 

2. Python 3

1
2
3
4
5
6
7
8
9
10
11
12
13
import sys
 
if __name__ == '__main__':
    cntLoop = int(sys.stdin.readline())
    for i in range(cntLoop):
        inputData = sys.stdin.readline()
        score = [0* (len(inputData) + 1)
         
        for j in range(len(inputData)):
            if (inputData[j] == 'O'):
                score[j + 1= score[j] + 1
          
        print(sum(score))
cs

 

아래는 조금 더 짧게 줄인 코드입니다.

1
2
3
4
5
import sys
 
if __name__ == '__main__':
    for i in range(int(sys.stdin.readline())):
        print(sum(sum(range(1len(j) + 1)) for j in sys.stdin.readline().strip().split('X')))
cs