코딩테스트/HackerRank
[HacerRank] Permuting Two Arrays 📌, int[]와 Integer[] 차이
주니어주니
2023. 4. 4. 23:51
문제
A 배열과 B 배열을 조합해서 A`[i] + B`[i] >= k 를 모두 만족시키는 조합이 있으면 YES, 없으면 NO 반환
다른 사람 풀이
1) List를 배열로 변환
2) 배열을 정렬 (Barr은 내림차순으로 하고싶었는데 좀 복잡하더라)
3) A 배열의 i번째와 B 배열의 역순번째(?) 합으로 계산
만약, int[ ] 가 아니라 Integer[ ] 로 받으면 내림차순 다르게 가능
public static String twoArrays(int k, List<Integer> A, List<Integer> B) {
Integer[] Aarr = A.toArray(new Integer[0]);
Integer[] Barr = B.toArray(new Integer[0]);
Arrays.sort(Aarr);
Arrays.sort(Barr, Collections.reverseOrder());
for(int i=0; i<Aarr.length; i++) {
if(Aarr[i] + Barr[i] < k) {
return "NO";
}
}
return "YES";
}
List를 int[ ]로 변환할 때와 Integer[ ]로 변환할 때 !!! (int와 Integer의 차이)
int[ ] 로 변환할 때는 이렇게
int[ ] Aarr = A.stream().mapToInt(i -> i).toArray();
Integer[ ] 로 변환할 때는 이렇게
Integer[ ] Aarr = A.toArray(new Integer[0]);
차이점
int : 기본형 타입(primitive type)
- 변수의 타입 -> 값을 직접 저장
- 산술 연산 가능
- null 값 가질 수 없음
- 속도 빠름
- 메소드 호출, 클래스 변수 사용 불가
- Integer로 자동 형변환 가능
Integer : 참조형 타입(reference type)
- 기본형을 객체로 다루는 래퍼 클래스 (데이터의 주소를 저장)
- unboxing 하지 않으면 산술 연산 불가능
- null 값 가질 수 있음
- 메소드 호출, 클래스 변수 사용 가능
- int로 자동 형변환 불가 (intValue() 메소드 사용)
+) 다른 풀이
private static String twoArrays(int k, List<Integer> a, List<Integer> b) {
// A[i] + B[i] >= k 가 되게 하는 조합이 있는지
// 하나는 오름차순, 하나는 내림차순 정렬한 뒤 for문 돌면서 i번째의 합 >= k
Collections.sort(a);
Collections.sort(b, Collections.reverseOrder());
for(int i=0; i < a.size(); i++) {
if(a.get(i) + b.get(i) < k) {
return "NO";
}
}
return "YES";
}