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