작은 도서관

1. 문제

 

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

 

2. 풀이

 

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

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

 

<python />
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)
<c++ />
#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); } }

3. 문제 평가

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

profile

작은 도서관

@Flrea

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