Coding Test

백준 1946번 : 신입사원

연_우리 2021. 10. 26. 02:27
반응형


문제 이해하기

서류점수와 면접점수가 있다.

지원자들끼리 비교했을 때, 서류점수와 면접점수가 둘다 낮으면 불합격이다.

서류점수를 오름차순으로 정렬하고, 면접점수를 비교해보자.

 

테스트케이스 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에 대한 정보는 링크에서!

 

자바 배열, 객체 정렬하기 : Comparable, Comparator 인터페이스 (+다중정렬 예시)

[목차] 🟢 기본형변수, Wrapper클래스 배열 정렬  Arrays.sort(배열명) : 배열 오름차순 정렬  Arrays.sort(배열명, Collections.reverseOrder()) : 배열 내림차순 정렬 🟢 객체 정렬 : Comparable과 Comparato..

lotuus.tistory.com

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();
    }
}

 

반응형
  • 네이버 블러그 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 구글 플러스 공유하기
  • 카카오톡 공유하기