티스토리 뷰
반응형
풀이
t = int(input()) # 테스트 케이스의 개수
k = [input() for i in range(t)] # 각 테스트 케이스를 리스트로 만들어준다.
for i in range(t):
if k[i][0]=='O': #각 테스트 케이스의 첫번째가 O인지 판별
num=1 #O면 점수 1
count=1
else:
num=0 #X면 점수 0
count=1
for j in range(len(k[i])-1): #각 테스트 케이스의 길이까지
if k[i][j]=='O' and k[i][j+1]=='O': #전이 O이고, 후가 O이면
count+=1 #카운트를 올리고
num+=count #점수를 더해준다.
elif k[i][j+1]=='O': num+=1 #만약 뒤에 것만 O라면 1점 추가
elif k[i][j]=='O' and k[i][j+1]=='X': count=1 #앞에 O고 뒤에가 X면 카운트 초기화
print(num)
연속으로 증가한다고 했을 때, 일단 t로 테스트 케이스의 개수를 받고, k로 각각의 테스트 케이스를 리스트로 만들어 준다.
그러면 일단 K의 첫번째가 O인지 아닌지를 알아야 한다. 왜냐하면 O가 시작되는 지점부터 점수가 올라가기 때문이다.
그 후에 OO인지를 판별해주고, 맞다면 카운트를 올리고 그 카운트를 더해주면 그게 바로 점수가 된다 (OO이므로 1+1=count=2가 되고 더해주면 1+2점)
만약에 뒤에 것만 O, 즉, XO라면 1점만 추가.
그게 아니고 만약 앞이 O인데 뒤가 X라면 카운트를 1로 초기화한다.
이런 식으로 따로 따로 해서 풀었다.
만약에 이런 식으로 풀고 싶지 않다면, 다음과 같은 방법도 있다.
import sys
n = int(input())
for _ in range(n):
l = sys.stdin.readline().rstrip().split('X')
s = 0
for i in range(len(l)):
s += sum(range(len(l[i]) + 1))
print(s)
2등 코드이다. 리스트를 불러오는 건 똑같으나, X를 기준으로 split한다.
그러면 첫번째 테스트 케이스의 경우 OO , O, OOO 와 같이 되었을 것이다.
그리고 나서 l이라는 리스트에서 각각을 불러오면, OO의 경우 길이가 2이기 때문에, range 함수를 썼을 때 0,1이 된다.
따라서 1을 더해줘서 3까지의 range 리스트로 만들면, 0+1+2가 되서 점수와 같게 된다.
이런 식으로 더해준 점수를 출력하면 간단하게도 풀 수 있다.
테스트 케이스의 최대 길이가 80이라, for for을 이용할 수 있기에 가능한 방식이다.
반응형