반응형
문제 이해하기
서류점수와 면접점수가 있다.
지원자들끼리 비교했을 때, 서류점수와 면접점수가 둘다 낮으면 불합격이다.
서류점수를 오름차순으로 정렬하고, 면접점수를 비교해보자.
테스트케이스 1번
(1, 4) 서류1등 : 합격
(2, 3) 합격한 1등보다 서류등수 낮음, 면접등수 높음 : 합격
(3, 2) 합격한 2등보다 서류등수 낮음, 면접등수 높음 : 합격
(4, 1) 합격한 3등보다 서류등수 낮음, 면접등수 높음 : 합격
(5, 5) 합격한 4등보다 서류등수 낮음, 면접등수 낮음 : 불합격
테스트케이스 2번
(1, 4) 서류1등 : 합격
(2, 5) 합격한 1등보다 서류등수 낮음, 면접등수 낮음 : 불합격
(3, 6) 합격한 1등보다 서류등수 낮음, 면접등수 낮음 : 불합격
(4, 2) 합격한 1등보다 서류등수 낮음, 면접등수 높음 : 합격
(5, 7) 합격한 4등보다 서류등수 낮음, 면접등수 낮음 : 불합격
(6, 1) 합격한 4등보다 서류등수 낮음, 면접등수 높음 : 합격
(7, 3) 합격한 6등보다 서류등수 낮음, 면접등수 낮음 : 불합격
코드
지원자 객체 : { 서류점수, 면접점수 }
지원자 배열 : [ 테스트케이스 ][ 케이스별지원자수 ]
지원자 객체 배열을 만들어서 서류점수 오름차순으로 정렬하고
차례대로 합격자의 면접점수와 지원자의 면접점수를 비교한다.
💛 Comparator에 대한 정보는 링크에서!
import java.io.*;
import java.util.*;
class Applicant{
private int document;
private int interview;
public int getDocument() { return document; }
public int getInterview() { return interview; }
public String getAllPrint() { return "("+document+", "+interview+")"; }
public Applicant(int document, int interview) {
this.document = document;
this.interview = interview;
}
}
class NewEmployee{
int testcase;
int applicants_count;
Applicant[][] applicants;
void scan_input(String inputed) {
InputStream in = new ByteArrayInputStream(inputed.getBytes());
System.setIn(in);
}
void scan() throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
//테스트케이스 수 입력
st = new StringTokenizer(br.readLine());
testcase = Integer.parseInt(st.nextToken());
applicants = new Applicant[testcase][];
//테스트케이스만큼 반복
for (int i = 0; i < testcase; i++) {
//케이스별 지원자수 입력
st = new StringTokenizer(br.readLine());
applicants_count = Integer.parseInt(st.nextToken());
applicants[i] = new Applicant[applicants_count];
//입력값 객체에 입력
for (int j = 0; j < applicants_count; j++) {
st = new StringTokenizer(br.readLine());
applicants[i][j] = new Applicant(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
}
}
}
void DocumentSort(){
//테스트케이스만큼 반복
for (Applicant[] applicant : applicants) {
//객체의 값 정렬
Arrays.sort(applicant, new Comparator<Applicant>() {
@Override
public int compare(Applicant o1, Applicant o2) {
if(o1.getDocument() > o2.getDocument()){ return 1; }
else if(o1.getDocument() < o2.getDocument()){ return -1; }
else{ return 0; }
}
});
}
}
void process() {
//서류점수 오름차순정렬
DocumentSort();
//테스트케이스만큼 반복
for (int i = 0; i < testcase; i++) {
int result = 1;
//서류점수 1등한 자의 면접등수
int itvRank = applicants[i][0].getInterview();
//케이스별 지원자수만큼 반복
for (int j = 1; j < applicants[i].length; j++) {
//System.out.print(itvRank + " : " + applicants[i][j].getInterview());
if(itvRank > applicants[i][j].getInterview()){
//합격한자의 면접등수 > 지원자의 면접등수
//System.out.println(" 합격");
itvRank = applicants[i][j].getInterview();
result++;
}else{
//합격한자의 면접등수 < 지원자의 면접등수
//System.out.println(" 불합격");
}
}
System.out.println(result);
}
}
}
public class Main {
public static void main(String[] args) {
NewEmployee r = new NewEmployee();
try {
r.scan();
} catch (IOException e) {
e.printStackTrace();
}
r.process();
}
}
import org.junit.jupiter.api.Test;
import java.io.IOException;
import static org.junit.jupiter.api.Assertions.*;
class MainTest {
@Test
void Test1(){
NewEmployee r = new NewEmployee();
r.scan_input("2\n" +
"5\n" +
"3 2\n" +
"1 4\n" +
"4 1\n" +
"2 3\n" +
"5 5\n" +
"7\n" +
"3 6\n" +
"7 3\n" +
"4 2\n" +
"1 4\n" +
"5 7\n" +
"2 5\n" +
"6 1");
try {
r.scan();
} catch (IOException e) {
e.printStackTrace();
}
r.process();
}
}
반응형
'Coding Test' 카테고리의 다른 글
SWEA 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (0) | 2022.02.10 |
---|---|
백준 1026번 : 보물 (0) | 2021.10.27 |
백준 2217번 : 로프 (시간초과 해결과정) (0) | 2021.10.25 |
백준 2839번 : 설탕 배달 (2) | 2021.10.23 |
백준 19941번 : 햄버거 분배 (0) | 2021.10.21 |