Programming Language/코딩테스트

[Java/Kotlin/TypeScript] 배열 <-> 리스트

떼루르르 2024. 11. 4. 00:25

https://www.hackerrank.com/challenges/compare-the-triplets/problem?isFullScreen=true

 

Compare the Triplets | HackerRank

Compare the elements in two triplets.

www.hackerrank.com

이 문제 풀다가 정리한 것 (HackerRank > Compare the Triplets)

문제 상황

아래와 같은 int형 배열이 있을 때,

int shortArray[] = new int[2];
int longArray[[] = new int[12345];

각 언어에서 어떻게 list로 변환하느냐?

근데 언어에 따라 List -> 배열로 바꾸는 것도 있음.

Java 7

길이가 짧은 배열 -> Arrays.asList() 사용

Arrays.asList(shortArray[0], shortArray[1]);

길이가 긴 배열 -> 반복문 사용하여 list에 추가

List<Integer> list = new ArrayList<>();
for (int value : longArray) {
    list.add(value);
}

Java 9 이상

길이가 짧은 배열 -> List.of() 사용 (Java 9 이상부터 List.of 지원)

List.of(scores[0], scores[1]); // Java 9 이상에서 사용 가능

길이가 긴 배열 -> stream 사용 (Java 8 이상에서도 가능)

 return Arrays.stream(longArray)
        .boxed()  // int -> Integer로 변환
        .collect(Collectors.toList()); // list로 변환

Kotlin

길이가 짧은 배열 -> arrayOf 사용

arrayOf(shortArray[0], shortArray[1])

 

길이가 긴 배열 -> toTypedArray 사용

val resultList = mutableListOf<Int>()
// 중간 로직
return resultList.toTypedArray() // MutableList<Int>를 Array<Int>로 변환

근데 논외로.. 이 문제는 이렇게 풀 수도 있다고 함.

fun compareTriplets(a: Array<Int>, b: Array<Int>): Array<Int> {    
    return (0 until a.size).fold(arrayOf(0, 0)) { acc, i ->
        when {
            a[i] > b[i] -> acc[0]++;
            a[i] < b[i] -> acc[1]++;
        }
        acc
    }
}

 

TypeScript

길이가 짧은 배열 -> 그냥 넣기

let aliceScore = 0;
let bobScore = 0;
// 중간 로직
return [aliceScore, bobScore];

길이가 긴 배열 -> 전개 연산자

return [...array];

반복문을 사용한 생성

let list: number[] = [];
for (let value of array) {
    list.push(value); // 배열의 각 요소를 리스트에 추가
}
return list;