[PYTHON] 8958 OX 퀴즈 - 등차 수열 / for

    https://www.acmicpc.net/problem/8958

     

    8958번: OX퀴즈

    "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수

    www.acmicpc.net

    문제 풀이

    • 'O이 연속적으로 나올때 1씩 증가하여 누적합을 해줌.

    solution - 등차수열의 합

    import sys
    t = int(sys.stdin.readline().strip())
    for _ in range(t):
      OX_str = sys.stdin.readline().strip().split('X')
    
      sum = 0
      for O_list in OX_str:
        sum += (len(O_list)*(1+len(O_list)))/2
      print(int(sum))
    • split을 사용하여 X를 구분하여 리스트로 반환합니다.
      • OOXXOXXOOO.split('X') => ['OO', '', 'O', '', 'OOO']
    • 리스트의 요소인 연속적인 O의 값을 계산해주고 모두 더합니다.
      • 공차가 1인 등차수열의 합임으로 O의 개수 * (1 + O의 개수)/2 입니다.

    등차수열의 합

    solution - for문, index

    import sys
    t = int(sys.stdin.readline().strip())
    for _ in range(t):
      OX_str = sys.stdin.readline().strip() #OOXXOXXOOO
      score = 0
      sum = 0
      for OX in OX_str: # OX_str의 요소를 하나씩 순회함
        if OX == 'O': # 만약 O라면 score에 1씩 누적합함
          score += 1
        else:
          score = 0 # 'X가 나오면 score를 0으로 초기화 시킴(연속된 O가 끝나면 다시 0점이 됨)
        sum += score # sum에 score 점수를 더함
      print(sum)

     

    [참고] 나무 위키 위키피등차 수열

    'algorithm > 백준' 카테고리의 다른 글

    [PYTHON] 10828 스택  (0) 2023.01.30
    [PYTHON] 2566 최댓값  (0) 2023.01.30
    [PYTHON] 1546 평균  (0) 2023.01.26
    [PYTHON] 3052 나머지 - 중복을 제거하는 법 set  (0) 2023.01.26
    [PYTHON] 2908 상수 - reverse()  (2) 2023.01.26

    댓글