incastle의 콩나물

[알고리즘] 백준 8958번, OX퀴즈, 1차원 배열 사용하기, python(10) 본문

python

[알고리즘] 백준 8958번, OX퀴즈, 1차원 배열 사용하기, python(10)

incastle 2019. 4. 13. 01:23

문제

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

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

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

 

내가 처음 만든 코드 

case_num=int(input())

for i in range(case_num):
    case_line = input()

    point = 0
    word = []
    for i in range(len(case_line)):
        if case_line[i] == 'O':
            word.append(i)


    first_num = word.pop(0)
    tmp = []
    tmp.append(first_num)
    packet = []

    while len(word) >= 1:
        next_num = word.pop(0)
        if first_num + 1 == next_num :
            tmp.append(next_num)
            first_num = next_num
        else:
            packet.append(tmp)
            tmp =[]
            first_num = next_num
            tmp.append(first_num)
    packet.append(tmp)


    for i in range(len(packet)):
        point += int(len(packet[i])*(len(packet[i])+1)/2)
    print(point)

연속된 숫자를 찾는다는 것에 초점을 맞추다 보니 복잡하다. 푼 다음에 사람들 코드를 기웃기웃거려보니 나만큼 복잡하게 푼 사람은 없더라;; 위의 코드는 "OXOXOOXO"를 받으면 O의 인덱스를 list에 담고 인덱스의 수가 연속되는지를 카운트하는 방식이다. 

 

찾아본 코드 중에 하나

numb = int(input())
for j in range(numb):
    a = input()
    b = a.replace('X',' ')
    b = b.split()
    res_ = 0
    for i in range(len(b)):
        for j in range(1,len(b[0])+1):
            
            res_ += j

    print(res)

X를 전부 공백으로 바꾸고 공백 기준으로 리스트를 만든 게 이상 깊다. 

O가 얼마나 반복됐는지 카운트 할 때는 리스트 원소들의 길이를 통해서 파악한 것도 잘한 거 같다. 내 거는 너무 못난 코드..

Comments