[Hackerrank] Breaking the Records 문제 해설 - Algorithms > Implementation / Easy
Breaking the Records
1. 문제 설명
이 문제는 교내 농구 선수인 Maria의 시즌 성적을 구하는 문제이다. 한 시즌에서 n번 경기를 치루는 동안 각각의 점수를 s배열에 표기한다(s[0], s[1], ..., [sn-1]).
구하고자 하는 결과물은 다음과 같다.
- 한 경기에서 기록한 최고 점수가 업데이트 된 횟수
- 한 경기에서 기록한 최저 점수가 업데이트 된 횟수
예를 들면 다음과 같이 한 시즌 경기를 치뤘을 경우,
![]() |
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
이 문제는 반복문을 통해 해결 할 수 있다.- 초기 최고점과 최저점을 시즌 첫번째 경기의 점수로 설정한다.
- 경기 횟수만큼 반복문을 실행한다.
- 반복문 안에서 현재 최고점보다 더 높은 점수가 발생하면 increase가 발생했다고 생각하고 최고점 카운트를 1 증가시킨다.
- 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(" "));
}
댓글
댓글 쓰기