[JAVA]신입 사원
🚀 문제 - 1946 번
신입사원
난이도 : 실버 1
문제 링크 -> https://www.acmicpc.net/problem/1946
내가 시도 해본 코드
package BOJ.Greedy.silver;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class 신입사원_1946 {
static int t;
static int n;
static int[][] arr;
static int aRank;
static int bRank;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
t = Integer.parseInt(br.readLine());
while (t > 0) {
n = Integer.parseInt(br.readLine());
arr = new int[n + 1][2];
int cnt = 0;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine(), " ");
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i][0] > arr[j][0] || arr[i][1] > arr[j][1]) {
cnt++;
}
}
}
System.out.println(cnt);
t--;
}
}
}
- 예제 입력에 해당하는 값은 나왔는데 왜 답이 나왔는지 이해가 잘 안간다…
- 백준 채점에선 결론적으로 시간초과가 나와서 문제를 풀지 못했다.
- 내가 구현하려고했던건 배열의 처음 값 기준 다음값들을 비교했을때 0번째 인덱스값이나 1번째값중 하나라도 기준값보다 작다면 cnt++ 하는 로직을 구현하려고했다
문제 해결 코드
```java
package BOJ.Greedy.silver;
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer;
public class 신입사원_1946 {
static int t;
static int n;
static int[][] arr;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
t = Integer.parseInt(br.readLine());
for (int tc = 0; tc < t; tc++) {
n = Integer.parseInt(br.readLine());
arr = new int[n][2];
int cnt = 1; // 정렬의 첫번째 사람은 자동 채용
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine(), " ");
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
// 정렬-Comparator 구현
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
// return Integer.compare(o1[0],o2[0]);
}
});
int pivot = arr[0][1]; // 첫번째 지원자의 면접 성적을 기준으로 함.
for (int i = 1; i < n; i++) {
if (arr[i][1] < pivot) {
pivot = arr[i][1];
cnt++;
}
}
System.out.println(cnt);
}
br.close();
} } ```
문제를 풀면서 !
- Compartor 구현을 통해서 오름 항목을 오름차순으로 정렬해두고
- 처음 정렬된 값을 기준으로 면접 성적을 체크하고 갱신해가는 로직을 자주 사용할것 같은데
- 비슷한 문제가 나온다면 정렬 구현과 로직을 잘 생각하고 적용해야겠다.
😵 공지 사항 개인 학습을 위한 블로그입니다. 잘못된 정보가 있을 경우 언제든지 지적해주시면 감사하겠습니다. 😵