본문 바로가기
알고리즘

프로그래머스 LEVEL1 완주하지 못한 선수

by mingutistory 2020. 4. 3.
728x90

문제 

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

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

 

내 코드

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        for(int i = 0; i < participant.length; i++) {
            boolean flag = false;
            for(int j = 0; j < completion.length; j++) {
                if(participant[i].equals(completion[j])) {
                    completion[j] = null; 
                    flag = true;
                    break; 
                }
            }
            
            if(!flag) {
                answer += participant[i]; 
            }
        }
        return answer;
    }
}

뭔가 이렇게 하면 안될거 같은데 하면서도(효율성이 엄청 떨어지는 것 같은데) 다른 방법이 전혀 떠오르지 않았다. 

 

다른 사람 코드

1. Arrays.sort(); 메소드를 사용하는 방법.

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        int i;
        for ( i=0; i<completion.length; i++){

            if (!participant[i].equals(completion[i])){
                return participant[i];
            }
        }
        return participant[i];
    }
}

전혀 생각하지 못했다. for문에서 빠져나오는게 확실히 빠를 수 밖에 없음. 

 

2. HashMap 사용

import java.util.HashMap;

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

        for (String key : hm.keySet()) {
            if (hm.get(key) != 0){
                answer = key;
            }
        }
        return answer;
    }
}

 

공부 뒤 내용 추가

 

http://tech.javacafe.io/2018/12/03/HashMap/

 

자바 HashMap을 효과적으로 사용하는 방법

HashMap 은 편하고 빠르다. 하지만 어떻게 하면 효율적으로 잘 사용할지 몸부림치는 순간도 많다. 원문은 https://dzone.com/articles/how-to-use-java-hashmap-effectively 이다. HashMap 는 자바 개발자가 거의 매일 사용하는 가장 유명한 데이터 구조 중 하나이다. 이번 글에서는 자바에서 HashMap 이 무엇인지, 왜 사용해야하는지, 어떻게 사용할지에 대하여 다루려 한다. HashMap 기술에 깊히

tech.javacafe.io

 

백준 알고리즘도 좋지만 프로그래머스는 처음 풀어봤는데 지금 계속 백준 dp 풀어서 그런지 문제가 새로운거 같고 채점방식도 더 마음에 들고 .. 일단 병행하면서 할 것

300x250

댓글