

import java.util.Scanner;
public class Main {
public int[] solution(int n, int[] arr) {
for(int i = 0; i < n - 1; i++) {
int idx = i;
for(int j = i + 1; j < n; j++) {
if(arr[j] < arr[idx]) {
idx = j;
}
}
int tmp = arr[i];
arr[i] = arr[idx];
arr[idx] = tmp;
}
return arr;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
for(int x : T.solution(n, arr)) {
System.out.print(x + " ");
}
}
}

import java.util.Scanner;
public class Main {
public int[] solution(int n, int[] arr) {
for(int i = 0; i < n - 1; i++) {
for(int j = 0; j < n - i - 1; j++) {
if(arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
return arr;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
for(int x : T.solution(n, arr)) {
System.out.print(x + " ");
}
}
}

import java.util.Scanner;
public class Main {
public int[] solution(int n, int[] arr) {
for(int i = 0; i < n; i++) {
int tmp = arr[i], j;
for(j = i - 1; j >= 0; j--) {
if(arr[j] > tmp) {
arr[j + 1] = arr[j];
} else {
break;
}
}
arr[j + 1] = tmp;
}
return arr;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
for(int x : T.solution(n, arr)) {
System.out.print(x + " ");
}
}
}


import java.util.Scanner;
public class Main {
public int[] solution(int size, int n, int[] arr) {
int[] cache = new int[size];
for(int x : arr) {
int pos = -1;
for(int i = 0; i < size; i++) {
if(x == cache[i]) {
pos = i;
}
}
if(pos == -1) {
for(int i = size - 1; i >= 1; i--) {
cache[i] = cache[i - 1];
}
} else {
for(int i = pos; i >= 1; i--) {
cache[i] = cache[i - 1];
}
}
cache[0] = x;
}
return cache;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int s = kb.nextInt();
int n = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
for(int x : T.solution(s, n, arr)) {
System.out.print(x + " ");
}
}
}

import java.util.Arrays;
import java.util.Scanner;
public class Main {
public String solution(int n, int[] arr) {
String answer = "U";
Arrays.sort(arr);
for(int i = 0; i < n - 1; i++) {
if(arr[i] == arr[i + 1]) {
return "D";
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
System.out.println(T.solution(n, arr));
}
}

array.clone() : 배열 복사
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public ArrayList<Integer> solution(int n, int[] arr) {
ArrayList<Integer> answer = new ArrayList<>();
int[] tmp = arr.clone();
Arrays.sort(tmp);
for(int i = 0; i < n; i++) {
if(arr[i] != tmp[i]) {
answer.add(i + 1);
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
for(int x : T.solution(n, arr)) {
System.out.print(x + " ");
}
}
}

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
class Point implements Comparable<Point> {
public int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int compareTo(Point o) {
// 오름차순으로 정렬하기 위해 작은 거에서 큰 거 빼면 무조건 음수를 리턴하는 걸 이용하여 로직을 짬
if(this.x == o.x) {
return this.y - o.y;
} else {
return this.x - o.x;
}
}
}
public class Main {
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
ArrayList<Point> arr = new ArrayList<>();
for(int i = 0; i < n; i++) {
int x = kb.nextInt();
int y = kb.nextInt();
arr.add(new Point(x, y));
}
Collections.sort(arr); // compareTo에 의해서 작은 거일 경우 마이너스값이니까 오름차순으로 정렬됨
for(Point o : arr) {
System.out.println(o.x + " " + o.y);
}
}
}

import java.util.Arrays;
import java.util.Scanner;
public class Main {
public int solution(int n, int m, int[] arr) {
int answer = 0;
Arrays.sort(arr);
int lt = 0, rt = n - 1;
while(lt <= rt) {
int mid = (lt + rt) / 2;
if (arr[mid] == m) {
answer = mid + 1;
break;
}
if(arr[mid] > m) {
rt = mid - 1;
} else {
lt = mid + 1;
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
int[] arr = new int[n];
for(int i = 0 ; i < n; i++) {
arr[i] = kb.nextInt();
}
System.out.print(T.solution(n, m, arr));
}
}

결정 알고리즘은 lt에서 rt 사이에 요구하는 답이 반드시 있다고 확신할 수 있을 때만 사용할 수 있다.
Arrays.stream() : 배열의 반복자 역할을 함.
getAsInt() : stream의 max함수를 쓰고 나면 OptionalInt를 반환하기 때문에 우리의 문제에 맞는 int로 바꾸기 위해 사용하는 함수
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public int count(int[] arr, int capacity) {
int cnt = 1, sum = 0;
for(int x : arr) {
if(sum + x > capacity) {
cnt++;
sum = x;
} else {
sum += x;
}
}
return cnt;
}
public int solution(int n, int m, int[] arr) {
int answer = 0;
int lt = Arrays.stream(arr).max().getAsInt();
int rt = Arrays.stream(arr).sum();
while(lt <= rt) {
int mid = (lt + rt) / 2;
if(count(arr, mid) <= m) {
answer = mid;
rt = mid - 1;
} else {
lt = mid + 1;
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
int[] arr = new int[n];
for(int i = 0 ; i < n; i++) {
arr[i] = kb.nextInt();
}
System.out.print(T.solution(n, m, arr));
}
}

import java.util.Arrays;
import java.util.Scanner;
public class Main {
public int count(int[] arr, int dist) {
int cnt = 1;
int ep = arr[0];
for(int i = 1; i < arr.length; i++) {
if(arr[i] - ep >= dist) {
cnt++;
ep = arr[i];
}
}
return cnt;
}
public int solution(int n, int c, int[] arr) {
int answer = 0;
Arrays.sort(arr);
int lt = 1;
int rt = arr[n - 1];
while(lt <= rt) {
int mid = (lt + rt) / 2;
if(count(arr, mid) >= c) {
answer = mid;
lt = mid + 1;
} else {
rt = mid - 1;
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int c = kb.nextInt();
int[] arr = new int[n];
for(int i = 0 ; i < n; i++) {
arr[i] = kb.nextInt();
}
System.out.print(T.solution(n, c, arr));
}
}