큰 수 만들기
https://programmers.co.kr/learn/courses/30/lessons/42883
- 주어진 숫자의 순서는 바꾸지 않는다
- 앞에서 부터 숫자를 새로 만들 숫자 배열에 넣는다.
- 숫자배열에 넣기전에 배열 마지막의 숫자가 넣을 숫자보다 작다면 제거한다. 그리고 현재 숫자를 넣는다
- 단, 제거할 개수를 초과하면 안된다.
public static String getMaxNumber(String number, int k) {
String answer = "";
String[] numbers = number.split("");
int[] temp = new int[number.length()-k];
int index = -1;
int remove = 0;
if (k < 1) {
for (String s: numbers) {
answer += s;
}
return answer;
}
for (int i = 0; i < numbers.length; i ++) {
int n = Integer.parseInt(numbers[i]);
while (remove < k && index >= 0) {
if (temp[index] < n) {
temp[index] = 0;
++ remove;
-- index;
} else {
break;
}
}
++ index;
temp[index] = n;
}
for (int i: temp) {
answer += String.valueOf(i);
}
System.out.println(answer);
return answer;
}
단속카메라
https://programmers.co.kr/learn/courses/30/lessons/42884
- 진입지점이 빠른 순으로 정렬
-
최솟값과 최댓값을 다른 차량의 진입 진출과 비교해서 업데이트
다른 차량과 겹치는 부분이 있을 땐 최솟값을 진입이 더 늦은것으로 최댓값은 진출이 더 빠른것으로 업데이트한다.
- 범위를 벗어날 때마다 카메라 개수를 하나 씩 더한다.
import java.util.*;
class Solution {
public int solution(int[][] cars) {
int answer = 1;
Arrays.sort(cars, (a, b) -> Integer.compare(a[0], b[0]));
int min = -30000;
int max = 30000;
for (int[] car : cars) {
if (car[0] >= min && car[1] <= max) {
min = car[0];
max = car[1];
} else if (car[0] > max) {
min = car[0];
max = car[1];
answer += 1;
} else if (car[0] >= min) {
min = car[0];
} else if (car[1] <= max) {
max = car[1];
}
}
return answer;
}
}