본문 바로가기

Fundamentals/Algorithms

[해커랭크] Compare the Triplets

문제링크

 

Compare the Triplets | HackerRank

Compare the elements in two triplets.

www.hackerrank.com

 

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