https://www.acmicpc.net/problem/8958
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.
각 테스트 케이스마다 점수를 출력한다.
n = int(input())
for _ in range(n):
scr = 0
seq = 0
ox = input()
for i in range(len(ox)):
if ox[i] == 'O':
scr += 1
if i >= 1:
if ox[i] == ox[i-1]:
seq += 1
scr += seq
else:
seq = 0
continue
print(scr)
나는 O이면 일단 scr에 1을 더하고,
이후 O가 나온 만큼 seq를 증가시키고 scr에 이를 더했다.
만약 X가 나오면 seq를 초기화하였다.
답은 맞았지만 코드가 난잡해..
n = int(input())
for _ in range(n):
OX = input()
sum = 0
count = 0
for ox in OX:
if ox == 'O':
count += 1
sum += count
else:
count = 0
print(score)
shane_Park님(shorturl.at/efxF5)의 코드를 참고했습니다. 너무 깔끔하게 푸셔서 부럽습니다..
for i in range(len(ox))가 아닌 for ox in OX를 사용하니 코드가 간결해졌다.
나는 ox == 'O'이면 일단 1점을 주고, 구질구질하게 i = 0일 때의 예외를 처리한 반면,
여기서는 sum에 1점을 주고 시작하지 않고, count += 1, sum += count를 하였다.
이런 문제에서는 sum += 1로 시작하기보다는, count와 sum을 만들어 count를 늘리고 sum += count 하자.