programming

breaking best and worst records 파이썬 풀이 밎 해설


by Kitle · 2021. 01. 03.



이번 풀어볼 퀴즈는 해커랭크 사이트의 breaking best and worst records 퀴즈입니다.

심플하지만 여러 분기 처리와 초기화 관련 처리를 잘 해주어야 하는 퀴즈입니다.


문제

Maria는 대학 농구를하고 프로가되고 싶어합니다. 매 시즌 그녀는 그녀의 플레이 기록을 유지합니다. 그녀 는 게임에서 가장 많은 점수 와 가장 적은 점수 로 시즌 기록을 깨는 횟수를 표로 만듭니다. 첫 경기에서 득점 한 점수는 시즌 기록을 세우고 거기서부터 계산을 시작합니다.

시즌의 점수가 주어지면 Maria가 시즌 동안 득점 한 최고 점수 와 최저 점수를 기록한 횟수를 찾아 출력합니다.

즉 첫번째 플레이 기록을 기준으로 최고점을 몇번 기록 했는지, 최저점을 몇번 기록했는지 계산하는 문제라 볼 수 있다.

풀이

# Complete the breakingRecords function below.
def breakingRecords(scores):
h_score = None
h_score_cnt = 0
l_score = None
l_score_cnt = 0
for i in scores:
if h_score is None:
h_score = i
l_score = i
elif h_score < i:
h_score = i
h_score_cnt += 1
elif l_score > i:
l_score = i
l_score_cnt += 1

return str(h_score_cnt) + ' ' + str(l_score_cnt)

if __name__ == '__main__':

n = int(input())

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

result = breakingRecords(scores)

print(result)


해설

깔끔한 코드는 아니지만 위와 같이 하나하나 처리하였다.

    h_score = None
h_score_cnt = 0
l_score = None
l_score_cnt = 0

최초 값은 None 상태로 첫번째 값을 기준값으로 넣기 위해 정했다. 따라서 첫번째 None을 만나면 high sore와 low score가 정해진다. 그리고 한번도 기록을 깨거나 최저기록을 갱신하지 않는다면 결과로 0이 출력되므로 디폴트 값을 0으로 선정했다.

h_score < i 조건에 의해 최고기록을 갱신하면 최고기록을 바꾸고 카운터를 1 증가시킨다. 반대로 낮은 기록을 갱신하면 역시 낮은 기록을 갱신하고 최저기록 카운터를 갱신한다.

최종 결과가 최고점 4회 최저점 1회를 갱신했다면 '4 0' 같은 식으로 나타내야 하므로 str 변환 후 사이에 whitespace를 넣어준다.

이 부분을 출력해주면 끝.

더 깔끔한 방식이 있을 것 같으니 이 해설 풀이는 참고만 해 두자.


원본 퀴즈 출처 : https://www.hackerrank.com/challenges/breaking-best-and-worst-records/problem

풀이 깃 허브에서 보기 : https://github.com/kitlexyz/algorithm/blob/master/hackerrank/breaking-best-and-worst-records.py