파이썬 백준 8958번
브론즈2
https://www.acmicpc.net/problem/8958
문제 보기
분류: 1차원 배열, 구현, 문자열
문제 풀기
문자열을 입력받아 각 단위 문자를 리스트 index 하나씩 분리 저장한다.
리스트를 for 문 돌리면서 각 문자 "O", "X" 에 대해 조건을 준다.
문자 O 가 연속적으로 나타날 때마다 누적 점수는 1씩 증가한다.
이때, 처음으로 O 가 나타나면 point 는 0 이기 때문에
if ox == "O" and point == 0:
point = 1
sum_points += point
의 조건을 입력하였다.
그리고, 연속적으로 O 가 나타나는 경우에 대해 매번 1씩 누적 포인트를 할당하므로
elif ox == "O" and 0 < point:
point += 1
sum_points += point
와 같이 조건을 주었다.
문자 X 가 나타나는 시점에는 그동안 쌓여있던 누적 점수가 0이 된다. 따라서,
elif ox == "X":
point = 0
로 포인트가 초기화된다.
코드 보기
import sys
inputdata = sys.stdin.readline
def fnOXquiz(N):
for _ in range(N):
ox_ls = list(map(str, inputdata().strip()))
print(ox_ls) # test print
point = 0
sum_points = 0
for ox in ox_ls:
if ox == "O" and point == 0:
point = 1
sum_points += point
elif ox == "O" and 0 < point:
point += 1
sum_points += point
elif ox == "X":
point = 0
print(sum_points)
if __name__ == "__main__":
N = int(inputdata().strip())
fnOXquiz(N)
# 5
# OOXXOXXOOO
# OOXXOOXXOO
# OXOXOXOXOXOXOX
# OOOOOOOOOO
# OOOOXOOOOXOOOOX
# ['O', 'O', 'X', 'X', 'O', 'X', 'X', 'O', 'O', 'O']
# 10
# ['O', 'O', 'X', 'X', 'O', 'O', 'X', 'X', 'O', 'O']
# 9
# ['O', 'X', 'O', 'X', 'O', 'X', 'O', 'X', 'O', 'X', 'O', 'X', 'O', 'X']
# 7
# ['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
# 55
# ['O', 'O', 'O', 'O', 'X', 'O', 'O', 'O', 'O', 'X', 'O', 'O', 'O', 'O', 'X']
# 30
'공부하기 > 백준' 카테고리의 다른 글
[JavaScript] 백준 풀기 10430 - 나머지 (0) | 2022.11.01 |
---|---|
[Python] 백준 풀기 1654 - 랜선 자르기 (0) | 2022.10.31 |
[Python] 백준 풀기 10814 - 나이순 정렬 (0) | 2022.10.29 |
[Python] 백준 풀기 2675 - 문자열 반복 (0) | 2022.10.28 |
[Python] 백준 풀기 11651 - 좌표 정렬하기 2 (0) | 2022.10.27 |