2023. 2. 8. 18:11ㆍ백준/파이썬
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다.
O는 문제를 맞은 것이고, X는 문제를 틀린 것이다.
문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다.
예를 들어, 10번 문제의 점수는 3이 된다."OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
case_list = list(input().rstrip())
sum_score = 0
score = 0
for j in case_list:
if j == 'O':
score = +1
else:
score = 0
sum_score += score
print(sum_score)
처음에 이렇게 써줬습니다.
이렇게 썼을 때 OOXXOXXOOO를 입력해서 출력하면
점수 계산이 6이 나옵니다. 즉 2 + 1 + 3 으로 출력이 된 겁니다.
뭐가 잘못된 거지 했는데 score = +1이라고 써줘서
연속으로 j == 'O'일 때
이전에 score에 +1 했던 게 score 변수에
저장이 안되어있고 for문을 돌 때 초기화 되어서
O가 연속으로 나와도 점수가 다 1로 읽혔던 겁니다.
score += 1로 고쳐줍니다.
방법 1)
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
case_list = list(input().rstrip())
sum_score = 0
score = 0
for j in case_list:
if j == 'O':
score += 1
else:
score = 0
sum_score += score
print(sum_score)
5
OOXXOXXOOO
10
OOXXOOXXOO
9
OXOXOXOXOXOXOX
7
OOOOOOOOOO
55
OOOOXOOOOXOOOOX
30
=> 정답입니다!
이 문제 예제 입력할 때 한번에 복사해서 붙여넣으면 출력이 이상하게 될 거예요.
예제 한 줄 한 줄 입력해줘야 합니다.
방법2)
리스트를 하나 더 만들어서 각 O X 리스트에 해당하는 점수 리스트를 따로 만들어서
점수를 그 리스트에 append 해줬습니다.
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
case_list = list(input().rstrip())
score_list = []
score = 0
for j in case_list:
if j == 'O':
score += 1
else:
score = 0
score_list.append(score)
print(sum(score_list))
=> 정답입니다!
.rstrip()
저는 여기서 sys.stdin.readline()을 썼습니다.
rstrip을 해주지 않으면 개행문자가 리스트에 담깁니다.
지난 문제들과는 다르게 strip()으로 입력값을 받지않아 빼먹은 부분인데
sys.stdin.readline()은 input()과 달리 개행문자를 포함한다는 특징 잊지 맙시다!
sys.stdin.readline() / input() 차이점 더 보실분들은 여기에서 보세요!
'백준 > 파이썬' 카테고리의 다른 글
[ 백준 문제 15596 / 파이썬 ] 정수 N개의 합 (0) | 2023.02.09 |
---|---|
[ 백준 문제 4344 / 파이썬 ] 평균은 넘겠지 (0) | 2023.02.09 |
[ 백준 문제 1546 / 파이썬 ] 평균 (0) | 2023.02.08 |
[ 백준 문제 3052 / 파이썬 ] 나머지 (0) | 2023.02.08 |
[ 백준 문제 5597 / 파이썬 ] 과제 안 내신 분..? (0) | 2023.02.08 |