PS
[백준] 정렬(1026, 1946, 18870, 1181)
solanarey
2024. 9. 28. 12:13
보물(1026)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] a = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Integer[] b = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).boxed().toArray(Integer[]::new);
// 가장 큰 숫자와 가장 작은 숫자를 곱하는 것으로 값을 최소화 시키기 위해 각각 오름차순, 내림차순으로 정렬
Arrays.sort(a);
Arrays.sort(b, Collections.reverseOrder());
int sum = 0;
for (int i = 0; i < n; i++) {
sum += a[i] * b[i];
}
System.out.println(sum);
}
}
신입사원(1946)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
StringTokenizer st;
int n, res, min;
List<Person> list;
StringBuilder sb = new StringBuilder();
while (t-- > 0) {
n = Integer.parseInt(br.readLine());
list = new ArrayList<>();
res = 1; // 서류점수가 1위인 사람은 무조건 합격이므로 1로 지정
min = 0;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
list.add(new Person(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
}
list.sort(Comparator.comparingInt(p -> p.documentScore)); // 서류 점수 기준으로 오름차순 정렬
min = list.get(0).interviewScore; // 서류 점수가 가장 높은사람의 인터뷰 점수로 설정하여 비교시작함
for (int i = 1; i < list.size(); i++) {
if (list.get(i).interviewScore < min) { // 그 다음으로 서류점수 순위가 높은사람의 인터뷰 스코어가 앞 순위 사람보다 순위가 높다면, 하나라도 더 높은 것이기에 res 증가하고 min 갱신
res++;
min = list.get(i).interviewScore;
}
}
sb.append(res).append("\n");
}
System.out.println(sb);
}
static class Person {
int documentScore;
int interviewScore;
public Person(int documentScore, int interviewScore) {
this.documentScore = documentScore;
this.interviewScore = interviewScore;
}
}
}
좌표 압축(18870)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.spec.RSAOtherPrimeInfo;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n]; // 원본 배열
int[] sorted = new int[n]; // 정렬된 배열
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0 ; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
sorted[i] = arr[i];
}
// 배열 오름차순으로 정렬하고 중복제거
int[] unique = Arrays.stream(sorted).sorted().distinct().toArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
int idx = Arrays.binarySearch(unique, arr[i]); // 원본배열의 첫번째부터 해당 값을 유니크배열에서 이분탐색하여 인덱스를 찾음
sb.append(idx + " ");
}
System.out.println(sb);
}
}
단어 정렬(1181)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] arr = new String[n];
for (int i = 0; i < n; i++) arr[i] = br.readLine();
Arrays.sort(arr, (o1, o2) -> {
// 문자열 길이가 같은경우 사전순 으로 정렬
if (o1.length() == o2.length()) return o1.compareTo(o2);
// 문자열 길이수 오름차순 정렬
return o1.length() - o2.length();
});
StringBuilder sb = new StringBuilder();
sb.append(arr[0]).append("\n");
for (int i = 1; i < n; i++) {
if (!arr[i].equals(arr[i-1])) { // 동일한 문자열은 출력하지 않음
sb.append(arr[i]).append("\n");
}
}
System.out.println(sb);
}
}