Alice와 Bob이 각각 하나씩 문제를 만들어 HackerRank 플랫폼에 제출했고, 한 리뷰어가 세 가지 기준(문제의 명확성, 독창성, 난이도)에 대해 1부터 100까지 점수를 매기는 상황입니다. Alice의 문제에 대한 평가는 a = (a[0], a[1], a[2])로, Bob의 문제에 대한 평가는 b = (b[0], b[1], b[2])로 주어집니다. 각 카테고리별로 Alice와 Bob의 점수를 비교하여, 더 높은 점수를 받은 사람에게 1점씩 부과하는 방식입니다
풀이 :
function compareTriplets(a: number[], b: number[]): number[] {
const result:number[] = [0, 0];
for(let i = 0; i < a.length; i++){
if(a[i] > b[i]){
result[0]++;
}else if(a[i] < b[i]){
result[1]++;
}
}
return result;
}
result[0]와 result[1]의 값을 증가시키기 위해 result[0] = result[0] + 1과 같이 작성했으나 문제는 없더라도 ++ 연산자를 사용하여 같은 작업을 좀 더 간결하게 표현할 수 있습니다
함수형 프로그래밍으로 작성해보기
function comparePoints(a: number, b: number):[number, number] {
return [
a > b ? 1:0,
a < b ? 1:0,
]
}
function compareTriplets(a: number[], b: number[]): number[] {
return a.reduce(
(scores, current, index) => {
const [alicePoint, bobPoint] = comparePoints(current, b[index]);
return [scores[0] + alicePoint, scores[1] + bobPoint];
},
[0, 0]
);
}
함수 comparePoints는 특정 조건에 따라 점수를 비교하는 로직을 구현한 재사용 가능한 순수 함수이며 이 함수는 compareTriplets 함수 내에서 호출되어 두 배열 간의 각 요소를 비교하고, Alice와 Bob의 점수를 계산하는데 사용됩니다
'Fundamentals > Algorithms' 카테고리의 다른 글
[해커랭크] Mini-Max Sum (0) | 2023.11.14 |
---|---|
[해커랭크] Diagonal Difference (0) | 2023.11.13 |
[해커랭크] A Very Big Sum (0) | 2023.11.10 |
[해커랭크] Simple Array Sum (0) | 2023.11.09 |
[해커랭크] Solve Me First (0) | 2023.11.09 |