https://www.acmicpc.net/problem/8958
문제 풀이
- 'O이 연속적으로 나올때 1씩 증가하여 누적합을 해줌.
solution - 등차수열의 합
import sys
t = int(sys.stdin.readline().strip())
for _ in range(t):
OX_str = sys.stdin.readline().strip().split('X')
sum = 0
for O_list in OX_str:
sum += (len(O_list)*(1+len(O_list)))/2
print(int(sum))
- split을 사용하여 X를 구분하여 리스트로 반환합니다.
- OOXXOXXOOO.split('X') => ['OO', '', 'O', '', 'OOO']
- 리스트의 요소인 연속적인 O의 값을 계산해주고 모두 더합니다.
- 공차가 1인 등차수열의 합임으로 O의 개수 * (1 + O의 개수)/2 입니다.
solution - for문, index
import sys
t = int(sys.stdin.readline().strip())
for _ in range(t):
OX_str = sys.stdin.readline().strip() #OOXXOXXOOO
score = 0
sum = 0
for OX in OX_str: # OX_str의 요소를 하나씩 순회함
if OX == 'O': # 만약 O라면 score에 1씩 누적합함
score += 1
else:
score = 0 # 'X가 나오면 score를 0으로 초기화 시킴(연속된 O가 끝나면 다시 0점이 됨)
sum += score # sum에 score 점수를 더함
print(sum)
'algorithm > 백준' 카테고리의 다른 글
[PYTHON] 10828 스택 (0) | 2023.01.30 |
---|---|
[PYTHON] 2566 최댓값 (0) | 2023.01.30 |
[PYTHON] 1546 평균 (0) | 2023.01.26 |
[PYTHON] 3052 나머지 - 중복을 제거하는 법 set (0) | 2023.01.26 |
[PYTHON] 2908 상수 - reverse() (2) | 2023.01.26 |
댓글