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

이찬혁·2024년 4월 11일

알고리즘

목록 보기
39/72

프로그래머스 Lv1 - 완주하지 못한 선수 문제

프로그래머스 알고리즘 고득점 Kit 카테고리의 해시 문제 중 레벨 1 완주하지 못한 선수 문제를 풀이했다.
HashMap과 3번의 단일 for문을 통해 풀이하였으며, 주요 흐름은 아래와 같다.

  1. participant 배열에서 for문을 통해 해시맵에 키로는 이름을 사용하고 값으로는 숫자(카운트)를 사용(중복 이름일 시 카운트 증가)
  2. completion 배열에서 for문을 통해 해시맵에서 완주자를 카운트(1씩 감소)
  3. 마지막 해시맵에서 for문을 통해 카운트가 0이 아닐 경우(동명이인이거나 완주자 리스트에 없을 경우는 0 이상일 것임) 해당 이름 리턴

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);

    }
}
profile
나의 개발로그

0개의 댓글