-
[코딩테스트] 백준(BAEKJOON) - 신입 사원(Java, 1946번)코딩테스트/백준 2023. 5. 5. 12:23728x90
안녕하세요~
오늘 올려볼 문제는 바로 신입사원 이라는 문제입니다.
이 문제 역시 풀어내지 못해 풀이를 봤던걸로 기억합니다 ㅠㅠ
언제쯤 알고리즘의 고수가 될 수 있을까요?
나이는 자꾸 먹어가고 실력은 늘어나는거 같지가 않고 걱정입니다 참 ㅠㅠ
좋은날이 올거라 믿으며 시작해 보겠습니다.
먼저 문제입니다.
https://www.acmicpc.net/problem/1946
1946번: 신입 사원
첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성
www.acmicpc.net
문제의 내용을 보면 ' 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다.'
이 부분이 문제의 핵심이 되지 않을까 조심스럽게 생각이 됩니다.
그렇다는건 비교가 필요하다는 말이겠죠?
비교가 필요하다는건 바로~ 정렬입니다!
해당 부분까지만 언급을 한채로 이제 제가 작성한 코드를 보여드립니다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; import java.util.Scanner; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); int time=Integer.parseInt(bf.readLine()); int answer=0; //int[] answer_arr=new int[time]; StringBuilder sb=new StringBuilder(); for(int i=0;i<time;i++) { int count=Integer.parseInt(bf.readLine()) ; int[][] arr=new int[count][2]; String line=""; answer=1; for(int j=0;j<count;j++) { line=bf.readLine(); arr[j][0]=Integer.parseInt(line.split(" ")[0]); arr[j][1]=Integer.parseInt(line.split(" ")[1]); } Arrays.sort(arr, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[0]-o2[0]; } }); int standard=arr[0][1]; for(int j=1;j<count;j++) { if(standard>arr[j][1]) { answer++; standard=arr[j][1]; } } //System.out.println(answer); sb.append(answer); sb.append("\n"); } System.out.println(sb.toString()); } }
그럼 하나씩 들어가보시죠~
for(int j=0;j<count;j++) { line=bf.readLine(); arr[j][0]=Integer.parseInt(line.split(" ")[0]); arr[j][1]=Integer.parseInt(line.split(" ")[1]); } Arrays.sort(arr, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[0]-o2[0]; } });
- 서류심사 성적과 면접시험 성적을 입력받습니다. 현재는 정렬이 되지않아 추후에 비교하기 불편합니다. 그렇기에 0번 Array를 기준으로 정렬해 비교를 용이하게 하겠습니다.
int standard=arr[0][1]; for(int j=1;j<count;j++) { if(standard>arr[j][1]) { answer++; standard=arr[j][1]; } }
- 우리는 앞서 0번째를 기준으로 정렬했습니다. 그럼이제 1번째 Array만 비교하게 된다면?
그렇습니다. 서류심사 성적은 이미 비교가 돼있고 면접심사 성적을 비교하면 둘다 비교하게 되는겁니다~
- 기준으로 0번째의 성적을 받고 비교합니다. 비교를하면서 얘보다는 높다 이런 기준으로 계속 standard를 업데이트하며 체크합니다.
그러다가 결과가 나오면 출력후 마무리하면 되겠습니다.
이번문제는 어떠셨나요?
쉬우셨을까요?
저는 standard를 바꿔야한다는 점을 알아채지 못했습니다 ㅜㅠ
그렇다면 이 문제는 여기까지~
감사합니다:D
😊😊😊
'코딩테스트 > 백준' 카테고리의 다른 글
[코딩테스트] 백준(BAEKJOON) - 이분 그래프(Java, 1707번) (0) 2023.07.06 [코딩테스트] 백준(BAEKJOON) - 촌수계산(Java, 2644번) (0) 2023.06.30 [코딩테스트] 백준(BAEKJOON) - 카드 정렬하기(Java, 1715번) (0) 2023.05.02 [코딩테스트] 백준(BAEKJOON) - 30(Java, 10610번) (0) 2023.05.01 [코딩테스트] 백준(BAEKJOON) - 주유소(Java, 13305번) (0) 2023.04.29