package Java_18_3.src;
public class Practice1 {
public static void solution(int[] nums) {
int idx = 0;
for (int num : nums) {
if (idx == 0 || num > nums[idx - 1]) {
nums[idx++] = num;
}
}
System.out.print("[" + idx + "] ");
for (int i = 0; i < idx; i++) {
System.out.print(nums[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
// Test code
solution(new int[] {1, 1, 2}); //idx)[2] 1 2
solution(new int[] {0, 0, 1, 1, 1, 2, 2, 3, 3, 4}); //idx)[5] 0 1 2 3 4
}
}
package Java_18_3.src;
import java.util.ArrayList;
public class Practice2 {
public static ArrayList<Integer> solution(int[] nums) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
int index = Math.abs(nums[i]) - 1;
if (nums[index] < 0) {
list.add(Math.abs(index + 1));
}
nums[index] = -nums[index];
}
return list;
}
public static void main(String[] args) {
// Test code
int[] nums = {4, 3, 2, 7, 8, 2, 3, 1};
System.out.println(solution(nums)); //[2, 3]
nums = new int[]{1, 1, 2};
System.out.println(solution(nums)); //[1]
nums = new int[]{1, 3, 1, 3, 5, 5};
System.out.println(solution(nums)); //[1, 3, 5]
}
}
package Java_18_3.src;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
public class Practice3 {
public static void solution(int[] arr, int k, int x) {
// key: 절대값 차이 / value: 해당 값
HashMap<Integer, ArrayList<Integer>> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
// Math.abs():절대값
int diff = Math.abs(x - arr[i]);
// 동일한 절대값이 있는지 없는지를 위해 하나 꺼내봄
ArrayList<Integer> cur = map.get(diff);
if (cur == null) {
// 값이 없으면 해당 절대값을 넣어줌
map.put(diff, new ArrayList<>(Arrays.asList(arr[i])));
} else {
// 절대값이 같으면 값이 작은수가 앞에 배치되어 출력 될 수 있도록
int idx = cur.size();
for (int j = 0; j < cur.size(); j++) {
if (cur.get(j) > arr[i]) {
idx = j;
break;
}
}
cur.add(idx, arr[i]);
}
}
// 출력을 위한 list
ArrayList<Integer> result = new ArrayList<>();
int cnt = 0;
while (map.size() > 0) {
int minDiff = map.keySet().stream().min((a, b) -> a - b).get();
ArrayList<Integer> cur = map.get(minDiff);
map.remove(minDiff);
while (cur.size() > 0) {
result.add(cur.get(0));
cur.remove(0);
cnt++;
if (cnt == k) {
break;
}
}
if (cnt == k) {
break;
}
}
Collections.sort(result);
System.out.println(result);
}
public static void main(String[] args) {
// Test code
int[] arr = {1, 2, 3, 4, 5};
solution(arr, 4, 3);
arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
solution(arr, 5, 5);
arr = new int[]{2, 4};
solution(arr, 1, 3);
arr = new int[]{2, 4};
solution(arr, 3, 3);
}
}
'개발 공부 > 문제와 풀이' 카테고리의 다른 글
선형 자료구조 - 큐(Queue) 연습문제 (0) | 2024.08.20 |
---|---|
Java) 연습문제 3-2 (0) | 2024.08.10 |
Java) 연습문제 2-2 (0) | 2024.08.10 |
Java) 연습문제 2-1 (0) | 2024.08.10 |
Java) 물을 가장 많이 담을 수 있는 면적 구하기 (0) | 2024.08.09 |