알고리즘/프로그래머스 / / 2021. 11. 28. 23:51

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

문제 링크


https://programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

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

programmers.co.kr

 

풀이 방법 1


sort + loop 이용하여 풀이

사실 이번 문제는 해시 문제여서 HashMap을 더 공부하고 풀이 방법을 추가해서 올려야 할 듯하다.

import java.util.Arrays;

public class Programmers_42576 {

	public static void main(String[] args) {
		String [] participant = {"leo", "kiki", "eden"};
		String [] completion = {"eden", "kiki"};
		
		Solution sol = new Solution();
		System.out.println( sol.solution(participant, completion));
	}

}//main

class Solution {
	public String solution(String[] participant, String[] completion) {
		String answer = null;
		// 1. 두 배열을 정렬한다
		Arrays.sort(participant);
		Arrays.sort(completion);
		
		// 2. 두 배열이 다를 때까지 찾는다
		int i = 0;
		for (i = 0; i < completion.length; i++) {
			if( !participant[i].equals(completion[i]))
				break;
		}
		
		// 3. 완주하지 못한 마지막 주자 return
		return answer = participant[i];
    }
}

 

풀이 방법 2


HashMap을 이용하여 풀이하였습니다.

1. Key값에 String, Value값에 인원수(int)로 입력 받아서 저장 (participant)

2. 이후 저장된 HashMap에서 completion배열의 해당되는 선수(String)를 찾아서 인원수를 -1 해줍니다.

3. 그렇게 처리된 결과값에서 value값이 0이 아닌 Key값이 완주하지 못한 선수가 됩니다.

import java.util.HashMap;

class Solution {
	public String solution(String[] participant, String[] completion) {
		String answer = null;
		
		//1. HashMap을 만든다.(participant)
		HashMap<String, Integer> map = new HashMap<>();
		for (String player : participant) {
			// 이전에 player가 map에 없으면 0을 주고 있었다면 player의 값을 가져와서 +1 
			map.put(player, map.getOrDefault(player, 0) +1);
		}
		
		//2. HashMap을 뺸다.(completion)
		for (String player : completion) {
			map.put(player, map.get(player) -1);
		}
		//3. value가 0이 아닌 마지막 주자를 찾는다.
		for(String key : map.keySet() ) {
			if ( map.get(key) != 0 ) {
				answer = key;
				break;
			}
		}
		return answer;
    }
}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유