[백준 파이썬 8958번]1차원 배열, OX 퀴즈 ★객체LIST저장방법★
2021. 7. 30. 01:50
728x90
반응형
#1 내방식
import sys
import random
while True:
print("몇번 반복하실껀가요? " , end = ' ')
TestCase = int(sys.stdin.readline())
if TestCase<0 or TestCase>80:
print("테스트케이스 값 다시 입력하세요.")
else:
break
for i in range(TestCase):
midscore = 1
finscore = 0
b =1
OX = ['O','X']
OX = OX*random.randrange(3,10)
random.shuffle(OX)
#print("len(OX) - 1 = {} ".format(len(OX)-1))
for j in range(0,len(OX)-1):
if OX[j] == 'O' : #'O'가있다면
if OX[j+1] == 'O' : #뒤인덱스에 'O'가있다면
b+=1 #연속횟수 1더하기
midscore+=(1*b) #임시저장소에 (1*연속횟수)값 더하기
if j==(len(OX)-2):
finscore+=midscore
if OX[j+1] == 'X': #뒤에 인덱스가'X'라면
if b>=2: #임시저장소가 한번의 연속성을 가졌다면 뭐 b>=2 이렇게 해도 될듯
finscore += midscore #최종저장소에 임시저장소값 더하기
midscore =1 #임시저장소값 1로 초기화
b =1 #연속횟수값 1로 초기화
else:
continue
print(OX)
print("점수계산 : ",finscore)
Random 함수를 사용하여 풀어보았다.
★★★★1. random.randomrange(3,6) ===> 3부터 5까지의 수의 랜덤으로 추출
2. random.shuffle(객체) ===> 객체의 값들을 섞어준다!
18번째줄 range(0,len(OX) -1) ===> len(ox) -1 을 한 이유 : OX[j+1] 값을 처리할때 len(ox)로 하면 범위가 넘어가게 된다.
23번째줄 if문 ==> j == (len(ox) - 2) 한 이유 : 인덱스의 경우 길이보다 하나 작은 값으로 생각해야 한다. len(OX)-2 의 인덱스는 뒤에서 두번째를 의미한다. j값이 뒤에서 두번째의 인덱스 순서가 왔을때 뒤에서 두번째와 마지막이 'O'일경우 for문을 종료해주고 finscore에 저장값을 저장해야 하므로 이렇게 설정했다.
25번째줄 OX[j+1] == 'X' ==> 23번째줄과 비슷하게 'X'가 나오면 반복문을 중지 시켜야한다.
26번째줄 if문을 통해 연속횟수가 2회이상일경우 finscore에 중간값을 더하기하여 저장시키고 minscore와 연속횟수의미하는 b값을 1로 초기화 시켜준다.
#2 내방식_2 (SPLIT 함수 활용)
import sys
import copy
chul = []
while True:
TestCase = int(sys.stdin.readline())
if TestCase < 0 or TestCase > 80:
print("테스트케이스 값 다시 입력하세요.")
else:
for i in range(TestCase):
midscore = 1
finscore = 0
b = 1
OX_3 = []
OX = list((sys.stdin.readline().split('X'))) #'X'로 분류
OX_2 = copy.deepcopy(OX) #OX_2에 OX 복사
while '' in OX_2: #'X'로 분류를 했기때문에 빈 요소로 출력되는 부분이 있다.
#이를 ''이 OX_2에 있을때까지 반복한다.
OX_2.remove('') #OX_2리스트에서 빈 요소 ''를 삭제한다.
print("OX_2 리스트 : " , OX_2)
for k in range(len(OX_2)): #이제 OX_2리스트의 길이만큼 반복
OX_3.append(OX_2[k].count(str('O'))) #'O'가 몇개있는지 COUNT하여 OX_3리스트에 추가한다.
print("OX_3 리스트('X'이전의 'O'의 갯수 정리해놓은 리스트) : " , OX_3)
for p in range(len(OX_3)): #OX_3 리스트의 길이만큼 반복
midscore = 1
b=1
if OX_3[p]>=1: #OX_3의 요소는 X가 나오면 분류해놓은 곳에서
for q in range(int(OX_3[p])-1): #중요!!!!!!!!!!! : 'O'개수의 이전까지의 RANGE 설정!!!
#왜냐하면 midscore를 애초에 1로 설정했기 때문
b+=1
midscore += (1*b)
finscore+= midscore
chul.append(finscore)
break
for i in range(len(chul)):
print("점수 계산 : " ,chul[i])
#3 구글링 방식(객체에 List 저장하기)
import sys
import random
while True:
print("몇번 반복하실껀가요? " , end = ' ')
TestCase = int(sys.stdin.readline())
if TestCase<0 or TestCase>80:
print("테스트케이스 값 다시 입력하세요.")
else:
break
for i in range(TestCase):
midscore = 1
finscore = 0
b =1
OX = ['O','X']
OX = OX*random.randrange(3,10)
random.shuffle(OX)
#print("len(OX) - 1 = {} ".format(len(OX)-1))
for j in range(0,len(OX)-1):
if OX[j] == 'O' : #'O'가있다면
if OX[j+1] == 'O' : #뒤인덱스에 'O'가있다면
b+=1 #연속횟수 1더하기
midscore+=(1*b) #임시저장소에 (1*연속횟수)값 더하기
if j==(len(OX)-2):
finscore+=midscore
if OX[j+1] == 'X': #뒤에 인덱스가'X'라면
if b>=2: #임시저장소가 한번의 연속성을 가졌다면 뭐 b>=2 이렇게 해도 될듯
finscore += midscore #최종저장소에 임시저장소값 더하기
midscore =1 #임시저장소값 1로 초기화
b =1 #연속횟수값 1로 초기화
else:
continue
print(OX)
print("점수계산 : ",finscore)
728x90
반응형
'Python(백준) > 배열' 카테고리의 다른 글
[Python] 백준 2562번 최대값 (0) | 2022.09.14 |
---|---|
[백준 파이썬 4344번]1차원 배열, 평균은 넘겠지 ★객체LIST저장방법★but아직 미구현 (0) | 2021.07.31 |
[백준 파이썬 3052번]1차원 배열, 평균구하기 ★객체저장방법(map)★ (0) | 2021.07.29 |
[백준 파이썬 3052번]1차원 배열, 나머지 구하기 ★SET함수★ (0) | 2021.07.29 |
[백준 파이썬 2577번]1차원 배열, 숫자의개수 (0) | 2021.07.28 |