프로그래머스: 완주하지 못한 선수(Java, Swift)

코딩테스트 고득점Kit부터 풀어보라 추천을 해줘서 이것부터 풀기로 했다.

Hash문제에서 가장 첫번째 문제. 마라톤 참가 선수 배열과 완주선수 배열이 주어지고, 완주하지 못한 선수 이름을 반환하는 문제이다. 그저 마라톤 참가 선수 배열과 완주 선수 배열을 비교해 완주배열에 없는 이름을 리턴하면 된다. 여태까지 Hash를 써본적이 거의 없는데 이번 단계를 통해 확실히 알아두어야 할 듯 하다.

 

Java

import java.util.HashMap;

public class Solution {
    
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String,Integer> hm = new HashMap<>();

        for (String item : participant){
            hm.put(item,hm.getOrDefault(item,0)+1);
        }
        for (String item : completion){
            hm.put(item, hm.get(item)-1);
        }
        
        for (String item : hm.keySet()){
            if (hm.get(item) != 0){
                answer = item;
                break;
            }
        }
        return answer;
    }

}

swift는 지원을 해주지 않지만 dictionary를 이용해 풀어보았다. Java처럼 getOrDefault함수가 존재하지 않아서 dictionary에 key가 존재하지 않을 시 key를 만들고 value값이 1이 되도록 했다.

 

Swift

import Foundation

func solution(participant : [String],completion : [String])->String{
    var answer = ""
    var hm : [String:Int] = [:]
    for item in participant {
        if hm.contains(where: { (key: String, value: Int) in
            return key == item
        }){
            hm[item] = hm[item]!+1
        }else{
            hm[item]=1
        }
    }
    for item in completion {
        hm[item] = hm[item]!-1
    }
    for item in hm.keys {
        if hm[item] != 0{
            answer = item
            break
        }
    }
    return answer
}

print(solution(participant: ["A","B","C","D","F"], completion: ["A","B","C","D"]))