Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 외래키제약조건위반
- 코테
- 2178
- CS
- CPU스케줄링
- 운영체제
- BFS
- 해시
- 백준
- 컴퓨터구조
- SpringBatch
- 프로그래머스
- 임베디드타입
- 파이널프로젝트
- 구현
- 스케일아웃
- 산업은행it
- Spring JPA
- 트리셋
- DB replication
- findById
- 트리맵
- 그래프탐색
- 프로젝트
- JPA
- springboot
- 폰켓몬
- fatch
- 산업은행청년인턴
- flyway
Archives
- Today
- Total
나 JAVA 봐라
[백준] 1946번 신입사원 본문
https://www.acmicpc.net/problem/1946
1946번: 신입 사원
첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성
www.acmicpc.net
문제에 따르면, 서류/ 면접 등수가 하나라도 뒤쳐지면 탈락한다.
등수는 하나하나씩 직접 돌아가주면서 비교해줘야한다.
이 때, 등수를 정렬하지 않으면 서류/면접 등수 두 개 모두 비교해주어야하는 코드가 복잡해지므로 먼저 서류 등수를 기준으로 오름차순 정렬을 해야했다.
Arraylist에 오름차순 기준으로 정렬할 수도 있지만, 서류 등수를 배열 인덱스로 하고 면접 등수를 값으로 하면 정렬 없이 처리할 수 있을 것 같아 해당 방법을 사용했다.
즉, rank[서류 등수] = 면접 등수 로 값을 입력 받았다.
서류 등수가 1등이면 당연히 합격이기 때문에 합격자count 정보를 담는 pass에 1을 먼저 담았다.
그리고 서류 1등의 면접 등수를 기준으로 비교를 시작해야하기 때문에 compare_rate에 서류1등의 면접등수를 담았다.
이 후, 서류 등수 2등부터 순서대로 돌아가며 면접 등수를 비교하여
- 면접 등수가 compare_rate보다 낮을 경우(즉, compare_rate < 면접등수)
- 별 다른 처리 없이 넘기기 (탈락)
- 면접 등수가 compare_rate보다 높을 경우(즉, compare_rate > 면접등수)
- 합격자count에 1 더하기
- compare_rate를 더 높은 등수로 바꿔주기 (다음 비교할 등수부터는 해당 등수보다 더 높아야함)
위와 같은 방법으로 구현했다.
package yejin.song;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_신입사원 {
static int T;
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
// 테스트 케이스만큼 반복
for (int i = 0; i<T; i++){
N = Integer.parseInt(br.readLine());
int rank[] = new int[N];
for (int j = 0; j<N; j++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
rank[a-1] = b;
}
int pass = 1; // 서류 1등은 무조건 붙음
int compare_rate = rank[0]; //서류 1등의 면접 등수
for (int j = 1; j<N; j++){
if (compare_rate > rank[j]){
pass++;
compare_rate = rank[j];
}
}
System.out.println(pass);
}
}
}
'코딩테스트 > 그리디' 카테고리의 다른 글
[프로그래머스] 큰 수 만들기 (0) | 2024.08.14 |
---|---|
[백준] 2217번 로프 (0) | 2024.03.03 |