백준코딩/브론즈
백준 8958번(OX퀴즈) - Java, Python, C#
Regain
2023. 12. 1. 14:53
바로가기
문제
https://www.acmicpc.net/problem/8958
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
문제 요약
ox 퀴즈의 결과를 입력받고 점수를 출력하는 문제이다. 이때 연속해서 맞출경우 연속 정답 수(ex. OOO 같이 연속해서 정답을 맞출 경우 +1, +2, +3 점수를 추가한다)만큼 점수를 더해준다.
입력값
1. ox퀴즈 케이스의 개수
2. 케이스마다 한 문자열(0~80)
출력값
케이스 별 점수
순서도 & 아이디어
1. ox퀴즈 케이스의 개수 n 입력 받기
<n번 만큼 반복>
2. 문자열 입력 받기
3. 문자열의 정답 개수 파악하기
4. 정답 출력
<반복끝>
여기서 연속 정답을 처리하는 방법으로 문자열의 인덱스를 사용했다. for문을 사용해 문자열의 길이 만큼 반복해주고 0번부터 끝까지 O인 경우를 찾는다. 찾았을 때 연속 정답 변수(cnt)에 +1을 해주고 그 수를 점수에 더해 주었다.
만약 X가 나온다면 연속 정답 변수(cnt)를 0으로 초기화하였다.
자바
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
int n = Integer.parseInt(reader.readLine()); // 문자열 수 입력
while (true) {
String str = reader.readLine(); // 문자열 입력 받기
int cnt = 0; // 연속 정답인 수를 체크하는 변수
int score = 0; // 점수 출력 변수
// 문자열을 0번 인덱스부터 마지막까지 O일 경우를 찾고 점수에 더해주기
for (int i = 0; i<str.length(); i++) {
if (str.charAt(i) == 'O') {
cnt += 1;
score += cnt;
} else { // x일 경우 연속 정답 변수 초기화
cnt = 0;
}
}
System.out.println(score); // 점수 출력
n -= 1; // 1회 반복했음을 나타냄
if (n == 0) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
파이썬
n = int(input()) # 문자열 개수 입력
while (True):
cnt = 0 # 연속 정답 수 초기화
score = 0 # 점수 초기화
str = input() # 문자열 입력 받기
# 문자열 길이만큼 반복해서 정답 찾기
for i in range(len(str)):
if (str[i] == 'O'): # i번째 문자열이 정답일 경우
cnt += 1
score += cnt
else:
cnt = 0 # 만약 정답(O)가 아닐 경우 연속 정답 수 초기화
n -= 1
print(score)
if (n == 0):
break
C#
namespace Baekjoon
{
internal class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
while(true)
{
string str = Console.ReadLine();
int cnt = 0;
int score = 0;
for(int i = 0; i < str.Length; i++)
{
if (str[i] == 'O')
{
cnt++;
score += cnt;
}
else
{
cnt = 0;
}
}
Console.WriteLine(score);
n--;
if (n == 0)
{
break;
}
}
}
}
}