[Hackerrank] Breaking the Records 문제 해설 - Algorithms > Implementation / Easy

Breaking the Records


1. 문제 설명

이 문제는 교내 농구 선수인 Maria의 시즌 성적을 구하는 문제이다. 한 시즌에서 n번 경기를 치루는 동안 각각의 점수를 s배열에 표기한다(s[0], s[1], ..., [sn-1]).
구하고자 하는 결과물은 다음과 같다.

  1. 한 경기에서 기록한 최고 점수가 업데이트 된 횟수
  2. 한 경기에서 기록한 최저 점수가 업데이트 된 횟수

예를 들면 다음과 같이 한 시즌 경기를 치뤘을 경우, 

Maria의 한 시즌 성적
최고 점수는 10 -> 20 -> 25로 총 2번 업데이트 됐다(10점은 초기값).
그리고 최저 점수는 10 -> 5 -> 4 -> 2 -> 1로 총 4번 업데이트 됐다(10은 초기값).


2. Input Format

첫번째 줄에는 한 시즌에 치뤄진 경기 수(n)가 주어진다.
부전째 줄에는 Maria가 각 경기에서 기록한 점수(s)가 주어진다.

3. Output Format

최고 점수와 최저 점수가 업데이트 된 횟수를 각각 출력한다.

Sample Input 1

9
10 5 20 20 4 5 2 25 1

Sample Output 1

2 4

Sample Input2

10
3 4 21 36 10 28 35 5 24 42

Sample Output2

4 0


Solution

이 문제는 반복문을 통해 해결 할 수 있다.

  1. 초기 최고점과 최저점을 시즌 첫번째 경기의 점수로 설정한다.
  2. 경기 횟수만큼 반복문을 실행한다.
  3. 반복문 안에서 현재 최고점보다 더 높은 점수가 발생하면 increase가 발생했다고 생각하고 최고점 카운트를 1 증가시킨다.
  4. 3번과 동일한 형태로 현재 최저점보다 더 낮은 점수가 발생하면 decrease가 발생했다고 생각하고 최저점 카운트를 1 증가시킨다.
최종 코드는 다음과 같다.

function breakingRecords(score) {
    const scoreLength = score.length;

    let mostScore = score[0];
    let worstScore = score[0];
    let mostScoreIncreased = 0;
    let worstScoreDecreased = 0;

    for(let i = 0; i < scoreLength; i++){
        const curScore = score[i];

        if(mostScore < curScore){
            mostScore = curScore;
            mostScoreIncreased++;
        }
        if(worstScore > curScore){
            worstScore = curScore;
            worstScoreDecreased++;
        }
    }
    return [mostScoreIncreased, worstScoreDecreased];
}

function main() {
    var n = parseInt(readLine());
    score = readLine().split(' ');
    score = score.map(Number);
    var result = breakingRecords(score);
    console.log(result.join(" "));
}

댓글

이 블로그의 인기 게시물

[IIS] IIS 7.5 HTTP 오류 401.3 - Unauthorized 해결방법

[IIS] OraOLEDB.Oracle.1 설치 방법

[ASP] Server.CreateObject를 호출하지 못했습니다. 이 개체에 액세스할 수 없습니다.