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 배열을 사용하는데 미숙한지라 코드가 쓸데없이 길어졌다. 이걸 읽는 당신은 더 좋은 코드를 짤 수 있을 것이다.
'개발 > 백준 문제풀이' 카테고리의 다른 글
[파이썬] 2606 - 바이러스 (0) | 2021.02.10 |
---|---|
[파이썬] 2178 - 미로 탐색 (0) | 2021.02.09 |
[파이썬] 2164 - 카드2 (0) | 2021.01.26 |
[파이썬] 11557 - Yangjojang of The Year (0) | 2021.01.13 |
[파이썬] 1393 - 음하철도 구구팔 (1) | 2021.01.07 |