코딩 테스트/Python

[백준 코딩테스트(Python)] 1차원 배열 - OX퀴즈

알밤바 2022. 8. 22. 10:35
728x90
반응형

 

[백준 코딩테스트(Python)] 반복문 - 더하기 사이클

1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫

ars420.tistory.com


문제

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

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

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

 

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

 

출력

각 테스트 케이스마다 점수를 출력한다.

 


1. 문제 접근 방식

- 'O'일 때 뿐만 아니라 'O'이 연속으로 나올 때를 고려해야 함

   ▶ add_value라는 변수를 설정하여 초기값을 1로 지정

        'O'일 때, 단순히 1을 더해주는 것이 아닌 add_value 값을 더해줌

        그 다음 add_value에 1을 더해줌으로써 다음 'O'이 올 때 더해줄 값을 미리 지정

        add_value에 연속적인 'O'의 갯수가 쌓임

 

- 'X'가 나온 이후에 'O'이 나오면 다시 앞에서 더해진 수가 아닌 다시 1부터 시작함

   ▶ 'X'는 아무런 값도 더해주지 않음.

        그리고 'X' 이후에 나올 'O'을 위해 add_value를 1로 다시 초기화해줌

 

2. 풀이코드

num = int(input())

for _ in range(num):
    N = list(input())

    count = 0
    add_value = 1

    for i in N:
    	# 'O'일 때 뿐만 아니라 'O'이 연속으로 나올 때를 고려해야 함
        if i == "O":
            count += add_value
            add_value += 1
            
        # 'X'가 나온 이후에 'O'이 나오면 다시 앞에서 더해진 수가 아닌 다시 1부터 시작함
        else:
            add_value = 1
            
    print(count)

 

이번 문제도 너~무나도 어려웠다...add_value라는 변수를 생성하여 이것을 활용한다는 생각을 하지도 못했다.

다음번엔 이런 문제가 나오면 활용할 수 있겠지...?

728x90
반응형