문제
https://www.acmicpc.net/problem/8958
나의 풀이
나는 리스트를 순차적으로 탐색하면서 값이 O이면 cnt를 하나 올리고 X이면 cnt를 초기화하여 풀었다.
import sys, math
# 점수는 연속된 O의 개수
# 테스트 케이스 받기
# 각 번호의 점수가 몇 점인지 구하기
# -> 만약 이전 채점 결과가 O였고 지금도 O라면 현재 점수는 이전 점수 +1
# 모든 점수를 더한 후 출력하기
t = int(input())
for i in range(t):
result = list(input())
score=0
total=0
for j in result:
if j=='O':
score+=1
total+=score
else:
score=0
print(total)
다른 풀이
문자열 리스트를 ‘X’ 기준으로 자른 다음 [’OO’, ‘’, ‘O’, ‘’, ‘OOO’] 형태의 리스트의 요소 마다 점수를 구해 합산
OOO라면 1+2+3을 sum에 합산한다.
- range(1, 3) → [1, 2]의 숫자 범위를 만듦
- range(1, len(result[i])+1) → [1, 2, …, len(result[i])]의 숫자 범위
T = int(input())
for i in range(T):
# result = []
# result.append(input().split('X')) -> split('X')가 이미 리스트를 반환하기 때문에 이중 리스트 생겨버림
result = input().split('X') # 리스트를 X 기준으로 자르고
score = 0
for i in range(len(result)):
score += sum(range(1, len(result[i])+1))
print(score)
-> X기준으로 split하는 게 더 쉽고 직관적인듯 나중에도 써먹을 수 있는 발상인 것 같다.
'정글 > 알고리즘' 카테고리의 다른 글
| [백준/Python] 9095번 : 1, 2, 3 더하기 (0) | 2025.03.20 |
|---|---|
| [백준/Python] 1914 : 하노이 탑 (0) | 2025.03.20 |
| [파이썬] 입력함수/실수 타입 변환/map/filter함수/list 초기화 방법 (0) | 2025.03.20 |
| [백준/Python] 1182번 : 부분 수열의 합 (0) | 2025.03.20 |
| [백준/Python] 1074번 : Z (2) | 2025.03.19 |