1.Loop 개선(불필요한 구간 뛰어넘기)
2.Object 구조를 이용하기보다 index를 이용한 풀이가 더 빠르다
3.적절한 자료구조 사용
4.불필요한 오브젝트 제거
: position=1 변수를 주체로 기지국 범위 여부에 따라 기지국 설치
import java.util.*;
class Solution {
public int solution(int n, int[] stations, int w){
int answer =0;
Queue<Integer> q = LinkedList<>();
for(int s: stations) q.offer(s);
int position = 1;
while(position <=n) {
if(!q.isEmpty() && q.peek() - w <= position)
position = q.poll() + w +1;
else {
answer+=1;
position += 2*w+1;
}
}
return answer;
}
}
import java.util.*;
class Solution {
public int solution(int n, int[] stations, int w){
int answer =0;
int idx = 0;
int position = 1;
while(position <=n) {
if(idx< stations.length && stations[idx] - w <= position) {
position = stations[idx] + w +1;
idx++;
}
else {
answer+=1;
position += 2*w+1;
}
}
return answer;
}
}
Stream 활용
import java.util.*;
import java.util.stream.*;
public class Java0708_2 {
public String solution(int[] numbers) {
String answer = "";
answer = IntStream.of(numbers) // Integer의 배열 생성
.mapToObj(String::valueOf) // 배열을 String으로 변경
.sorted((s1,s2) -> (s2+s1).compareTo(s1+s2))// 내림차순 정렬
.collect(Collectors.joining()); // 배열의 원소를 하나의 문자열로 합치기
return answer.startsWith("0")? "0":answer;
// {0,0,0,0...} 일 경우 0 출력
}
}
Stream 활용
public int solution(int[] budgets, int M) {
int answer=0;
int start =0;
int end = IntStream.of(budgets).max().orElse(0);
while (start <= end) {
final int mid = (start + end) / 2;
// final : Stream을 사용할 때 쓰이는 변수들은 가변적이지 않아야함
int sum=IntStream.of(budgets)
.map( x -> Math.min(x,mid)) // 상한액이하만 더할 수 있도록
.sum();
if (sum>M)
end = mid-1;
else
start = mid+1;
answer = mid;
}
return answer;
}
import java.util.Arrays;
public class Java0708_3 {
public int solution(int[] A, int[] B) {
int answer =0;
// 오름차순 정렬한 뒤
Arrays.sort(A);
Arrays.sort(B);
// 큰 수부터 비교하기 위해 뒤에서 부터 탐색
// A보다 큰 B찾기
int b_idx = A.length-1;
for(int a_idx=A.length-1; a_idx>=0;a_idx--) {
if(B[b_idx] > A[a_idx]) {
answer++;
b_idx--; // B가 더 클 때만 b_idx감소
}
}
return answer;
}
}