본문 바로가기
컴퓨터/C, C++

[C/C++] 백준 8958번 C언어

by stdFrog 2022. 5. 17.

백준 8958번

OOXXOXOXOO"와 같은 OX퀴즈의 결과가 있다.

O는 문제를 맞은 것이고, X는 문제를 틀린 것이다.

문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다.

 

예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3= 10점이다.

 

OX 퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

 

첫째 줄에 테스트 케이스의 개수가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다.

문자열은 O와 X만으로 이루어져 있다.

 

#include <stdio.h>

int strlen2(char *arStr);

int main()
{
        int Num, result=0, plus=1;
        char arStr[80];

        scanf("%d", &Num);
        for(int i=0; i<Num; i++){
                scanf("%s", arStr);
                for(int j=0; j<strlen2(arStr); j++){
                        if(arStr[j]=='O'){
                                result+=plus;
                                plus+=1;
                        }else if(arStr[j]=='X'){
                                plus=1;
                        }
                }
                printf("%d\n", result);
                result=0;
                plus=1;
        }
}

int strlen2(char *arStr){
        int cnt=0;
        // 끝처리 만날때까지 반복
        while(arStr[cnt]!='\0'){
                ++cnt;
        }
        return cnt;
}

 

처음 작성한 코드는 \n%c와 예외 처리로 입력을 받았으나 %s와 주소(포인터 상수)를 이용하여 다시 작성했다.

 

'\0'는 널문자인데 문자열로 입력을 받았으므로 배열의 끝에 존재한다.

널 종료문자를 만날 때까지 반복문을 돌려 인수로 전달한 배열의 길이를 구하고 이를 main 함수 중간에 있는 for문의 조건식으로 사용했다.

 

for문 내부 실행문은 그냥 if문을 사용해도 되고 위처럼 else if를 사용해도 된다.

 

C는 가장 기본적인 문자열(str) 타입이 없으며 문자(char) 타입을 여러 개 모아 문자 배열을 만들고

이를 문자열처럼 사용하게 된다.

반응형

'컴퓨터 > C, C++' 카테고리의 다른 글

[C/C++] 백준 11720번 C언어  (0) 2022.05.19
[C/C++] 백준 4344번 C언어  (0) 2022.05.17
[C/C++] 백준 1546번 C언어  (0) 2022.05.16
[C/C++] 백준 2577번 C언어  (0) 2022.05.14
[C/C++] 백준 3052번 C언어  (0) 2022.05.14

댓글