🚀 문제 - 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 구현을 통해서 오름 항목을 오름차순으로 정렬해두고
  • 처음 정렬된 값을 기준으로 면접 성적을 체크하고 갱신해가는 로직을 자주 사용할것 같은데
  • 비슷한 문제가 나온다면 정렬 구현과 로직을 잘 생각하고 적용해야겠다.



😵 공지 사항 개인 학습을 위한 블로그입니다. 잘못된 정보가 있을 경우 언제든지 지적해주시면 감사하겠습니다. 😵