[프로그래머스] 완주하지 못한 선수(JAVA) - Level1

hsnam·2022년 1월 9일
0

프로그래머스

목록 보기
3/20
post-thumbnail

완주하지 못한 선수

문제

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

제한사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.
입출력 예
participant completion return
["leo", "kiki", "eden"]["eden", "kiki"] "leo"
["marina", "josipa", "nikola", "vinko", "filipa"]["josipa", "filipa", "marina", "nikola"] "vinko"
["mislav", "stanko", "mislav", "ana"]["stanko", "ana", "mislav"] "mislav"
입출력 예 설명
예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

JAVA

  • CASE1(Sort 및 배열 비교를 위한)
import java.util.Arrays;

class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        int i = 0;
        for (i = 0; i < completion.length; i++) {
            if (!participant[i].equals(completion[i])) {
                return participant[i];
            }
        }
        return participant[i];
    }
}
  • 문제 풀이
    참가한 마라톤 선수와 완주한 마라톤 선수의 각각의 배열을 Arrays.sort()를 이용하여 정렬한다.
    참가한 선수와 마라톤 선수를 비교하여 같지 않으면 반환한다.(?)
  • 결과
    정확성  테스트
    테스트 1 〉	통과 (0.08ms, 86MB)
    테스트 2 〉	통과 (0.06ms, 75.1MB)
    테스트 3 〉	통과 (0.50ms, 80.4MB)
    테스트 4 〉	통과 (1.34ms, 89.5MB)
    테스트 5 〉	통과 (0.90ms, 76.1MB)
    효율성  테스트
    테스트 1 〉	통과 (38.93ms, 82MB)
    테스트 2 〉	통과 (62.47ms, 89.3MB)
    테스트 3 〉	통과 (80.70ms, 94.7MB)
    테스트 4 〉	통과 (92.02ms, 96.3MB)
    테스트 5 〉	통과 (85.35ms, 96MB)
    채점 결과
    정확성: 50.0
    효율성: 50.0
    합계: 100.0 / 100.0
  • CASE2(HashMap을 이용한)
import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> answerMap = new HashMap<String, Integer>();
        for (String par : participant)
            answerMap.put(par, answerMap.getOrDefault(par, 0) + 1);

        for (String com : completion)
            answerMap.put(com, answerMap.getOrDefault(com, 0) - 1);

        for(String key : answerMap.keySet()) {
            if(answerMap.get(key) > 0) {
                answer = key;
            }
        }
        return answer;
    }
}
  • 문제풀이
    HashMap<String, Integer>형태의 인스턴스를 생성하여 각각의 참가자 배열과 완주자 배열을
    answerMap인스턴스에 처리한다.
    이때 참가자 배열은 answerMap에 put으로 입력하되 key는 참가자 이름으로 value는 인원수(?)로 입력한다.
    만약 같은 이름의 참가자가 존재하면 value에 +1을 더하여 입력하고 그렇치 않는다면 value에 0 값으로 입력한다.
    그 이후 완주자배열을 answerMap에 put으로 입력하되 만약 참가자 이름이 중복된다면 value에 -1을 하여 입력, 그렇치 않다면
    기본값 value에 0을 입력한다.
    그이후 value에 0이 아닌값을 찾아 key를 리턴한다.
  • 결과
    정확성  테스트
    테스트 1 〉	통과 (0.08ms, 86MB)
    테스트 2 〉	통과 (0.06ms, 75.1MB)
    테스트 3 〉	통과 (0.50ms, 80.4MB)
    테스트 4 〉	통과 (1.34ms, 89.5MB)
    테스트 5 〉	통과 (0.90ms, 76.1MB)
    효율성  테스트
    테스트 1 〉	통과 (38.93ms, 82MB)
    테스트 2 〉	통과 (62.47ms, 89.3MB)
    테스트 3 〉	통과 (80.70ms, 94.7MB)
    테스트 4 〉	통과 (92.02ms, 96.3MB)
    테스트 5 〉	통과 (85.35ms, 96MB)
    채점 결과
    정확성: 50.0
    효율성: 50.0
    합계: 100.0 / 100.0

0개의 댓글