프로그래머스 알고리즘 고득점 Kit 카테고리의 해시 문제 중 레벨 1 완주하지 못한 선수 문제를 풀이했다.
HashMap과 3번의 단일 for문을 통해 풀이하였으며, 주요 흐름은 아래와 같다.
RaceFailAthletes.java
package com.example.Programmers.Lv1;
import java.util.HashMap;
import java.util.Map;
/**
* 프로그래머스 Lv1 - 완주하지 못한 선수
*/
public class RaceFailAthletes {
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, Integer> pMap = new HashMap<>();
for (String part : participant) {
if (pMap.containsKey(part)) {
pMap.replace(part, pMap.get(part) + 1);
} else {
pMap.put(part, 1);
}
}
for (String comp : completion) {
if (pMap.containsKey(comp)) {
pMap.replace(comp, pMap.get(comp) - 1);
}
}
for (Map.Entry<String, Integer> entry : pMap.entrySet()) {
if (entry.getValue() != 0) {
answer = entry.getKey();
break;
}
}
return answer;
}
}
RaceFailAthletesTest.java
package com.example.Programmers.Lv1;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class RaceFailAthletesTest {
@Test
public void nearSameWordTest() {
RaceFailAthletes rfa = new RaceFailAthletes();
String result1 = rfa.solution(new String[] { "leo", "kiki", "eden" }, new String[] { "eden", "kiki" });
String result2 = rfa.solution(new String[] { "marina", "josipa", "nikola", "vinko", "filipa" },
new String[] { "josipa", "filipa", "marina", "nikola" });
String result3 = rfa.solution(new String[] { "mislav", "stanko", "mislav", "ana" },
new String[] { "stanko", "ana", "mislav" });
assertEquals("leo", result1);
assertEquals("vinko", result2);
assertEquals("mislav", result3);
}
}