incastle의 콩나물
[알고리즘] 백준 8958번, OX퀴즈, 1차원 배열 사용하기, python(10) 본문
문제
"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가 얼마나 반복됐는지 카운트 할 때는 리스트 원소들의 길이를 통해서 파악한 것도 잘한 거 같다. 내 거는 너무 못난 코드..
'python' 카테고리의 다른 글
python dictionary value를 기준으로 정렬하기, 이중 list의 특정 값 기준 (0) | 2019.04.17 |
---|---|
[알고리즘] 백준 1152번, 그룹 단어 체커, 문자열 사용하기, python(14) (0) | 2019.04.14 |
[알고리즘] 백준 2739번, 구구단 문제 , for문 활용 예제, python(6) (0) | 2019.04.06 |
[알고리즘] 백준 2441번, 별 찍기 - 4, for문, python(5) (0) | 2019.04.06 |
[python] 위도 경도 좌표 polygon 안/밖 유무 확인하기, shapely (3) | 2019.03.28 |
Comments