준호씨의 블로그

hackerrank - Breaking the Records - Python3 본문

개발이야기/PS - Problem Solving, 알고리즘

hackerrank - Breaking the Records - Python3

준호씨 2020. 5. 17. 23:21

 

문제: https://www.hackerrank.com/challenges/breaking-best-and-worst-records/problem

Maria는 대학농구를 하며 프로를 하고 싶어 합니다. 매 시즌에 그녀는 자신의 플레이 기록을 유지합니다. 그녀는 시즌별 최고 점수와 최소 점수를 깨는 횟수를 표로 기록합니다. 첫 경기에서 득점 한 점수를 기록하고 거기서부터 계산합니다.

예를 들어 특정 시즌의 점수를 scores = [12, 24, 10, 24]로 가정합니다. 점수는 게임의 순서대로 기록합니다. 그녀는 결과를 다음과 같이 작성합니다.

                                 Count
Game  Score  Minimum  Maximum   Min Max
 0      12     12       12       0   0
 1      24     12       24       0   1
 2      10     10       24       1   1
 3      24     10       24       1   1

Maria의 시즌 하나의 점수가 주어졌을 때 그녀가 그녀의 점수를 깬 횟수를 찾아서 출력하시오.

 

Function Description

breakingRecords함수를 완성하시오. 그녀가 그녀의 기록을 깬 횟수가 포함된 정수 배열을 반환해야 합니다. 0번째는 가장 크게 깬 점수이고 1번째는 가장 적게 깬 기록입니다.

breakingRecords는 다음은 파라미터들을 가집니다.

  • scores: 정수 배열

Input Format

첫 번째 줄이 정수 n은 게임의 수입니다.

두 번째 줄은 스페이스로 구분된 n개의 정수 숫자로 점수들을 나타냅니다.

Constraints

1<=n<=1000

0<=scores[i]<=10^8

Sample Input 0

9
10 5 20 20 4 5 2 25 1

Sample Output 0

2 4

Explanation 0

그녀는 그녀의 최고 점수를 두 번 깹니다. 2번째와 7번째입니다. 최악의 기록은 4번입니다. 1,4,6,8번째입니다. 그래서 우리는 2 4를 출력합니다.

 

풀이

템플릿 코드

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the breakingRecords function below.
def breakingRecords(scores):

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input())

    scores = list(map(int, input().rstrip().split()))

    result = breakingRecords(scores)

    fptr.write(' '.join(map(str, result)))
    fptr.write('\n')

    fptr.close()

그리 어려운 문제는 아닙니다. 일단 첫 번째 점수를 최고, 최저 점수 기준을 잡습니다. 점수를 순서대로 보면서 최고 점수보다 큰 점수가 나오면 최고 점수를 바꾸면서 최고 점수 갱신 카운트를 1 증가시킵니다. 반대로 최저 점수보다 작은 점수가 나오면 최저 점수를 바꾸면서 최저 점수 갱신 카운트를 1 증가시킵니다.

최고 점수 갱신 카운트와 최저 점수 갱신 카운트를 배열로 반환합니다. 설명한 것을 코드로 구현하면 아래와 같습니다.

def breakingRecords(scores):
    best = scores[0]
    worst = scores[0]

    break_best = 0
    break_worst = 0

    for score in scores:
        if score > best:
            best = score
            break_best += 1

        if score < worst:
            worst = score
            break_worst += 1

    return [break_best, break_worst]

 

0 Comments
댓글쓰기 폼