2020년 10월 20일 화요일

[Algorithm] 스트림 입력값 리스트로 비교 ( Compare the Triplets )


Compare the Triplets


문제 ]

Alice and Bob each created one problem for HackerRank. A reviewer rates the two challenges, awarding points on a scale from 1 to 100 for three categories: problem clarityoriginality, and difficulty.

The rating for Alice's challenge is the triplet a = (a[0], a[1], a[2]), and the rating for Bob's challenge is the triplet b = (b[0], b[1], b[2]).

The task is to find their comparison points by comparing a[0] with b[0]a[1] with b[1], and a[2] with b[2].

  • If a[i] > b[i], then Alice is awarded 1 point.
  • If a[i] < b[i], then Bob is awarded 1 point.
  • If a[i] = b[i], then neither person receives a point.

Comparison points is the total points a person earned.

Given a and b, determine their respective comparison points.

Example

a = [1, 2, 3]
b = [3, 2, 1]

  • For elements *0*, Bob is awarded a point because a[0] .
  • For the equal elements a[1] and b[1], no points are earned.
  • Finally, for elements 2a[2] > b[2] so Alice receives a point.

The return array is [1, 1] with Alice's score first and Bob's second.

Function Description

Complete the function compareTriplets in the editor below.

compareTriplets has the following parameter(s):

  • int a[3]: Alice's challenge rating
  • int b[3]: Bob's challenge rating

Return

  • int[2]: Alice's score is in the first position, and Bob's score is in the second.

Input Format

The first line contains 3 space-separated integers, a[0]a[1], and a[2], the respective values in triplet a.
The second line contains 3 space-separated integers, b[0]b[1], and b[2], the respective values in triplet b.

Constraints

  • 1 ≤ a[i] ≤ 100
  • 1 ≤ b[i] ≤ 100

Sample Input 0

5 6 7
3 6 10

Sample Output 0

1 1

Explanation 0

In this example:

Now, let's compare each individual score:

  • , so Alice receives  point.
  • , so nobody receives a point.
  • , so Bob receives  point.

Alice's comparison score is , and Bob's comparison score is . Thus, we return the array .

Sample Input 1

17 28 30
99 16 8

Sample Output 1

2 1

Explanation 1

Comparing the  elements,  so Bob receives a point.
Comparing the  and  elements,  and  so Alice receives two points.
The return array is .



제출 JAVA ]

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

public class Solution {

    // Complete the compareTriplets function below.
    static List<Integer> compareTriplets(List<Integer> a, List<Integer> b) {
        List<Integer> result = new ArrayList<Integer>();
        result.add(0);
        result.add(0);
        for(int i=0; i < a.size(); i++) {
            if(a.get(i)>b.get(i)) result.set(0, result.get(0)+1);
            else if(a.get(i)==b.get(i)) continue;
            else result.set(1, result.get(1)+1);
        }    
        return result;

    }

    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = 
            new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = 
            new BufferedWriter(new OutputStreamWriter(System.out));

        List<Integer> a = Stream.of(bufferedReader.readLine()
            .replaceAll("\\s+$""").split(" "))
            .map(Integer::parseInt).collect(toList());

        List<Integer> b = Stream.of(bufferedReader.readLine()
            .replaceAll("\\s+$""").split(" "))
            .map(Integer::parseInt).collect(toList());

        List<Integer> result = compareTriplets(a, b);

        bufferedWriter.write(
            result.stream().map(Object::toString).collect(joining(" "))"\n"
        );

        bufferedReader.close();
        bufferedWriter.close();
    }
}



풀이 ]

1. BufferedReader와 BufferedWriter를 활용하여 Input, Output데이터를 처리한다. 

InputSteamReader(System.in)과 OutputStreamWriter(System.out)은 콘솔로 데이터를 받고 내보내기 위함이다.


2. Stream은 자바8에서 추가된 기능으로, Array/Collection 자료형들의 요소를 하나씩 참조해 람다를 이용해 반복적으로 처리 가능하게 한다. 

.split.map.collection 함수를 통해 콘솔로 받은 String을 " "을 토큰으로 나누고, Integer형으로 값을 변환 후, 스트림을 리스트로 변환해 제네릭타입 변수에 넣는다.

즉 콘솔에 11 22 33 란 값을 입력하면 List [11, 22, 33]으로 변환한다.


3. compareTriplets(a, b) 함수를 통해 a[i] 와 b[i] ( i는 반복문 변수)를 비교해 결과 값을 새로운 List변수 result에 담는다. 

a[i]가 크면 result[0] 값에 +1이 되고 b[i]가 크면 result[1] 값에 +1이 된다.