프로그래머스(Programmers) 코딩테스트 연습
Level1 해시 완주하지 못한 선수 자바(Java) 풀이
문제풀이
java 알고리즘 문제 풀이의 두번째 문제이다. 처음 풀어본 문제보다는 자바 문법이 조금 익숙했다. 하지만, 해시를 어떻게 선언하는지 조차 모르고 있어서, 이 부분은 구글링을 하며 풀었다.
이번 문제를 통해서 자바의 해쉬맵을 사용할 수 있게 되었다. 해쉬맵의 여러가지 method들을 숙지하고 있으면 코테에 많은 도움이 될 것 같다.
참가자들이 저장되어 있는 String 배열을 HashMap에 옮겨 담는다.
이 때 참가자들의 이름은 Key값으로 Value는 참가자들의 중복의 유무를 포함하기 위해 default 값을 0으로, 중복된 참가자가 있으면 value를 1씩 증가시킨다.
완주한 참가자들의 이름을 containsKey를 사용하여 해당 Key값의 Value를 1씩 감소시킨다.
해쉬맵의 모든 키를 순회하면서 value값이 0보다 큰 값을 찾는다.
해당 키값을 answer에 저장한다.
return answer
코드
import java.util.* ;
public class Main {
public static void main ( String [] args ){
String [] participant = { "mislav" , "stanko" , "mislav" , "ana" };
String [] completion = { "stanko" , "ana" , "mislav" };
String answer = solution ( participant , completion );
System . out . println ( answer );
}
public static String solution ( String [] participant , String [] completion ){
//정답 문자열 변수 선언
String answer = "" ;
//해쉬맵(딕셔너리) 변수 선언 -> participant 키값으로 넣고 value 값에 Integer 선언해서 completion이랑 비교할거임
Map < String , Integer > ht = new HashMap < String , Integer >();
//해쉬맵에 participant를 키값으로 밸류는 default로 0씩, 키값 중복되면 1씩 추가
for ( int i = 0 ; i < participant . length ; i ++){
if ( ht . containsKey ( participant [ i ])){
ht . put ( participant [ i ], ht . get ( participant [ i ])+ 1 );
}
else {
ht . put ( participant [ i ], 1 );
}
}
//completion을 키값으로 찾아서 밸류값 1씩 감소
for ( int i = 0 ; i < completion . length ; i ++){
if ( ht . containsKey ( completion [ i ])){
ht . put ( completion [ i ], ht . get ( completion [ i ])- 1 );
}
}
//해쉬맵 모든 키를 순회하면서 0보다 큰거 answer에 저장
for ( String key: ht . keySet ()) {
if ( ht . get ( key )> 0 ){
answer = key ;
}
}
return answer ;
}
}
댓글남기기