인사고과(프로그래머스) JAVA

2023. 2. 28. 13:20·BackEnd/알고리즘 공부

https://school.programmers.co.kr/learn/courses/30/lessons/152995#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

  • 어떤 사원이 다른 임의의 사원보다 두 점수가 모두 낮은 경우가 한번이라도 있다면 그 사원은 인센티브를 받지 못한다.
  • 그렇지 않은 사원은 두 점수의 합이 높은 순으로 석차를 내어 석차에 따라 인센티브가 차등 지급된다.
  • 동석차이며, 동석차의 수만큼 다음 석차는 건너 뛴다.

입력이 이렇게 주어진다.

[2,2]는 완호의 근무 태도 점수와 동료 평가 점수이다. 

[2,1]은 [3,2] 보다 점수가 모두 낮으므로 인센티브를 받지 못한다. 그리고 [1,4] , [3,2], [3,2] 는 합이 5이므로 완호의 합인 4보다 크다. 그러므로 결국 완호는 4등이 된다.

 

문제에 대한 아이디어 

이 문제는 구현 문제인것 같다.

아이디어를 잘 생각해서 구현을 하면된다.

내가 생각한 아이디어는 제일 처음 점수를 입력받을 때, 근무 태도 점수를 내림차순으로 입력 받는다. 만약 근무 태도 점수가 같으면 동료 평가 점수를 오름 차순으로 받는다.

그 이유는 인센티브를 받지 못한 상대를 찾기 위해서이다.

  • 근무 태도 점수를 내림차순으로 할 경우 자신 보다 앞에 있는 것은 무조건 자신보다 점수가 낮다.
  • 동료 평가 점수를 오름 차순했으로 정렬했다. 만약 자신보다 앞에 있는 것중 자신 보다 근무 태도 점수가 높은게 있으면 인센티브를 받지 못한다.

  • 이제 2개의 합이 완호의 합보다 큰것을 찾으면 된다.

 

구현

import java.util.*;

class Node implements Comparable<Node>{
    int x; int y; 
    public Node(int x, int y){
        this.x=x;
        this.y=y;
    }
    // 근무 태도 점수는 내림차순, 동료 평가 점수는 오름 차순
    public int compareTo(Node n){
       if(this.x == n.x)
           return this.y-n.y;
        return n.x - this.x;
    }
}

class Solution {
    ArrayList<Node> score = new ArrayList<>();
    public int solution(int[][] scores) {
        int answer = 0;
        int att=0; 
        int sc=0;
        Node wanho = new Node(scores[0][0], scores[0][1]);
        score.add(wanho);
        for(int i=1; i<scores.length; ++i){
            score.add(new Node(scores[i][0], scores[i][1]));
        }
        Collections.sort(score);
        int maxScore = 0;
        for(Node n : score){
            //앞에 동료 평가 점수가 더 높은게 있는지 검사
            if(n.y < maxScore){
                if(n.equals(wanho)) {
                    answer = -1;
                    break;
                }
            }
            //없으면 동료 평가 점수 더 큰 것으로 바꿈
            else{
                maxScore = Math.max(maxScore, n.y);
                //완호 점수 합 보다 큰것이 있으면 answer 카운트
                if(n.x + n.y > wanho.x+wanho.y) ++answer;
            }
        }
        if(answer == -1) return answer;
        else return answer+1;
    }
}

'BackEnd > 알고리즘 공부' 카테고리의 다른 글

양과 늑대(프로그래머스) JAVA  (0) 2023.03.06
미로 탈출 명령어(프로그래머스) JAVA  (0) 2023.03.03
파괴되지 않은 건물(프로그래머스) JAVA  (0) 2023.02.27
등산코스 정하기(프로그래머스) JAVA  (0) 2023.02.22
운동(백준_1956)  (0) 2023.02.22
'BackEnd/알고리즘 공부' 카테고리의 다른 글
  • 양과 늑대(프로그래머스) JAVA
  • 미로 탈출 명령어(프로그래머스) JAVA
  • 파괴되지 않은 건물(프로그래머스) JAVA
  • 등산코스 정하기(프로그래머스) JAVA
인프라 감자
인프라 감자
  • 인프라 감자
    삶은 인프라
    인프라 감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (243)
      • 클라우드&인프라 (28)
        • 인프라 공부 (4)
        • AWS 구조와 서비스 (18)
        • 클라우드 공부 (4)
        • Terraform (2)
      • AWS Cloud School (13)
        • project (5)
        • Linux, Network (6)
        • Docker (2)
      • BackEnd (162)
        • JAVA 공부 (15)
        • 알고리즘 공부 (71)
        • MySQL 문제 풀기 (8)
        • 스프링 핵심 원리 - 기본편 (18)
        • 스프링 MVC 1편 (4)
        • 자바 ORM 표준 JPA 프로그래밍 (21)
        • 실전! 스프링 부트와 JPA 활용1 (8)
        • 실전! 스프링 부트와 JPA 활용2 (5)
        • 스프링 데이터 JPA (8)
        • Querydsl (4)
      • 혼자하는 프로젝트 (32)
        • 배달의 민족 클론코딩 (7)
        • 나만의 프로젝트 (10)
        • 스프링 부트로 구현한 웹 (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Email
    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    이것이 자바다
    다이나믹 프로그래밍
    완전탐색
    linux
    쿼드 압축
    VPN
    자동 배포
    유니온 파인드
    조합
    dp
    상속
    네트워크 기본 용어
    디팬스 게임
    자바
    스프링 핵심 원리-기본편
    정렬
    중첩 선언
    querydsl
    백트래킹
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
인프라 감자
인사고과(프로그래머스) JAVA
상단으로

티스토리툴바