작은 도서관

문제

 

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

 

풀이

 

 막힘 없이 풀다가 맞은 개수에 따라서 점수가 오르는게 아닌 연속 정답 수에 따라서 점수가 오르는걸 깨닫고 코드 몇 부분을 수정해야 했다.

 내가 생각한 방법은 이러하다. 점수 뿐 아니라 '스택'이라는 변수를 따로 만들어서 정답일때마다 스택을 1씩 올려주고, 틀렸을때는 0으로 초기화한다. 물론 점수는 그때그때 스택으로만 올려준다.

 

for i in range(int(input())):
    stack = 0
    score = 0
    s1 = str(input())
    for l in s1:
        if l == 'X':
            stack = 0
        elif l == 'O':
            stack += 1
        score += stack
    print(score)
#include <stdio.h>

int main(){
    char s1[80];
    int N;
    scanf("%d", &N);
    for(int i = 0;i < N;i++){
        int stack = 0, score = 0, l = 0;
        scanf("%s", s1);
        while(s1[l] != NULL){
            if(s1[l] == 'X'){
                stack = 0;
            }
            else if(s1[l] == 'O'){
                stack += 1;
            }
            score += stack;
            l++;
        }
        printf("%d\n", score);
    }
}

문제 평가

 파이썬으로 풀기는 쉬운 문제였지만 내가 아직 C 배열을 사용하는데 미숙한지라 코드가 쓸데없이 길어졌다. 이걸 읽는 당신은 더 좋은 코드를 짤 수 있을 것이다.

profile

작은 도서관

@Flrea

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!