프로그래밍/파이썬 공부

[백준 #8958][Python] OX퀴즈

winblack22 2021. 9. 6. 22:35

문제

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

 

풀이

연속으로 문제를 맞추면 점수가 늘어난다고?!

내가 문제를 푸는 입장이면 개꿀이지만 채점하는 입장이 되어 프로그램을 쓰려니 막막했다...

내가 백준 문제를 풀때의 마음가짐은... 아이디어만큼은 내가 짜보고... 함수 등 문법적인 부분은 구글의 도움을 받더라도 내 아이디어로 한번 풀어보자. 이다. (그러니까 틀렸습니다! 가 나올때까지... 오늘은 다행히 맞았다.)

 

아이디어!

OX를 숫자 1과 0으로 리스트를 다시 업데이트(?)하고,,, 문제를 맞췄을 때, 이전의 값에 +1을 해주면 자연스럽게 연속된 문제의 점수가 해결되는 구나! 로 생각했다.

t = int(input())

for i in range(t):
    ox = input()
    oxl = list(str(ox))
    for j in range(len(oxl)):
        if(oxl[j] == "O"):
            oxl[j] = 1
        else:
            oxl[j] = 0
        
    for k in range(1, len(oxl)):
        if(oxl[k] == 1):
            oxl[k] = oxl[k-1] + 1
    
    print(sum(oxl))

test case만큼 반복하고, 각 OX를 입력받아 하나씩 list에 넣는다. (>> oxl = list(str(ox)) )

그런 다음 리스트를 돌면서, "OX"를 숫자 1과 0으로 바꿔준다. ( j for문 )

이제, 다시 리스트를 돌면서 연속된 정답 점수 처리를 해준다! ( k for문 )

 

각 리스트의 숫자들을 다 더해주면 총 점수 완성!

 

뿌듯하다...

나 오늘 이 문제로... 브론즈 I 됐다... 후후.. 실버 #가보자고