https://www.acmicpc.net/problem/8958
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
이번에 풀어볼 문제는 8958번의 OX퀴즈입니다.
문제의 키포인트
1. 연속된 O의 경우 1씩 수가 증가하고, X일 때는 0으로 초기화된다.
2. 첫째 줄에는 테스트 케이스의 개수가 주어진다.
3. 각 테스트 케이스는 0보다 크고 80보다 작은 문자열이다.
해결방안
1. 테스트 케이스 개수를 받아올 변수를 선언해줍니다.
2. 연속된 수를 카운트할 변수를 선언해줍니다.
3. 총합을 출력할 배열을 선언해줍니다.
4. 테스트 케이스 문자열을 받아올 배열을 선언해줍니다.
5. 1번에 선언한 변수를 활용해 반복문으로 문자열을 입력받습니다.
6. if 조건문으로 'O' 인 경우와 그 외의 경우를 처리하여 계산하도록 합니다.
7. 마지막으로 값을 반복문을 통해 출력합니다.
순서도(Flowchart)
소스 코드(Source code)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main(void)
{
int input; // 입력 수
int i, j; // 반복 변수
int count; // 카운트
int sum[100] = { 0, }; // 합계
char arr[80]; // 테스트 케이스 문자열 저장변수
scanf("%d", &input);
for (i = 0; i < input; i++)
{
// 입력부
scanf("%s", &arr);
count = 1;
// 합계 계산부
for (j = 0; j < strlen(arr); j++)
{
if (arr[j] == 'O')
{
sum[i] += count;
count++;
}
else
{
count = 1;
}
}
}
// 출력부
for (i = 0; i < input; i++)
{
printf("%d\n", sum[i]);
}
return 0;
}
코딩 스킬(Coding Skill)
이번 문제에서는 string.h 라이브러리를 불러와 strlen() 함수를 활용하였습니다.
물론 해당 함수를 작성하지 않고 문자열 배열 크기만큼 반복문을 실행해도 되지만,
그러면 값이 입력되지 않은 배열까지 반복되므로 효율이나 메모리적인 부분에서 좋지 않습니다.
그래서 해당 strlen() 함수를 통해 해당 문자열 수만큼 반복문을 실행하여 효율을 높였습니다.
이 점 참고하시길 바라며,
그럼 오늘도 즐거운 코딩!
'코딩 | 알고리즘 & 문제풀이 > 백준_Backjoon' 카테고리의 다른 글
[C언어] Backjoon_Code 15596, 정수 N개의 합 (0) | 2021.07.01 |
---|---|
[C언어] Backjoon_Code 4344, 평균을 넘는 학생의 비율 (0) | 2021.06.30 |
[C언어] Backjoon_Code 1546, 평균 조작하기 (0) | 2021.06.28 |
[C언어] Backjoon_Code 3052, 서로 다른 나머지 계산하기 (0) | 2021.06.27 |
[C언어] Backjoon_Code 2577, 숫자의 개수 (0) | 2021.06.26 |