백준 8958번 파이썬

Myeongsu·2021년 9월 16일
0

백준

목록 보기
3/15

문제링크: 백준 8958번(OX퀴즈)
백준 8958번

처음 코드

import sys

n = int(input())
l = list(sys.stdin.readline().rstrip() for _ in range(n))

for i in l:
    sum = 0
    score = 0
    
    for j in i:
        if j == 'O':
            sum += 1
            score += sum
        else:
            sum = 0
            
    print(score)

먼저 테스트 케이스의 개수를 입력받고, 그 수 만큼 for문을 돌려 값을 입력받아 list로 변환해서 저장했다.
input() 대신 sys.stdin.readline()을 사용해서 입력 마지막에 개행문자 '\n'이 들어가는 것을 지워주기 위해 rstrip()을 붙여주었다.
이후 이중 for문으로 리스트의 각 요소를 'O'와 비교하여 개수를 세어 점수에 더해주는 식으로 구해 출력했다.


문제점

테스트 케이스만큼 for문을 돌려 문자열을 리스트로 입력받고, 다시 이중 for문을 돌려 결과를 출력하는 과정이 불필요하다고 생각, for문 사용을 줄여야 할 필요를 느낌


수정 코드

import sys

n = int(input())
for _ in range(n):
    result = sys.stdin.readline().rstrip()
    sum = 0
    score = 0
    
    for i in result:
        if i == 'O':
            sum += 1
            score += sum
        else:
            sum = 0
            
    print(score)

마찬가지로 먼저 테스트 케이스의 개수를 입력받았지만, 이전과 달리 문자열을 하나씩 입력받는 방식으로 하나의 for문과 리스트의 사용을 없앴다.
동시에 이중 for문으로 문자를 'O'와 비교해 개수를 세어 점수에 더해 출력했다.

profile
명수의 개발 공방

0개의 댓글

관련 채용 정보