본문 바로가기
코딩테스트/백준 알고리즘 풀이

백준 | 8958번 OX퀴즈, 파이썬

by Godgil 2020. 3. 16.

생각하는 시간이 점차 길어지기 시작하는 것 같다.

처음에 생각을 했을 땐, 문자열을 받고난 후, 문자열 합축으로 2O1X3O이런식으로 바꿔서 O앞부분의 숫자만 따로 떼어 낸 후 계산하려 했었다.

그렇게 코드를 짜면서 내려가는데, 이건 너무 비효율적인거같고, 코드가 많이 길어졌다.

 

그래서 나는 처음부터 다시 쪼개서 생각 해 보기로 했다.

 

#생각1. OX문제의 점수를 계산하는 문제이다.

#생각2. O는 1점 X는 0점을 기본으로 한다.

#생각3. 연속으로 O를 맞으면 점수가 개수만큼 1점씩 더 늘어난다.

#생각4. 문자열을 읽어들이면서 O는 1점을주고, 만약 다음에도 O면 추가점수를 변수로 또 만들어서 1점씩 늘린다

           만약 X가 나온다면 추가점수를 0점으로 초기화를 시켜준다.

 

나는 이렇게 문제를 정리한 후 코드를 다시 작성 했다.

 

 

num = int(input())#시도 횟수
for i in range(0,num):
    pro = input()#문자열 입력
    add = 0  # 추가점수
    base = 1  # O의 기본점수
    total = 0  # 현재 전체점수
    for j in pro:
        if j == 'O':
            total = total + base + add
            add = add + 1
        elif j == 'X':
            add = 0
    print(total)

 

코드를 제출하니 정답으로 인정이 되었다.

문제를 풀기 전에, 하나씩 생각하는 과정을 글로 적는 습관을 가져야겠다.

 

 

문제 출처

https://www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

문제 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는

www.acmicpc.net

 

 

댓글