공부/알고리즘, 자료구조

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

오잎 클로버 2022. 2. 8. 08:30
728x90

해당 문제의 링크는 여기입니다.

 

key와 value를 사용하여 문제를 해결해야하는 문제라는 것은 파악했지만

굳이 HashMap를 사용해야하는 가에 대한 의문이 들어 그냥 배열을 사용하여 문제를 해결했습니다.

 

public String solution(String[] participant, String[] completion) {
    // 선수 목록에는 있지만, 완주자 목록에 없으면
    // 해당 선수 이름을 반환

    // 둘 다 정렬하면 해당 위치에 동일한 이름이 올라갈 것임
    Arrays.sort(participant);
    Arrays.sort(completion);

    int i;
    for (i = 0; i < completion.length; i++) {
        if (!completion[i].equals(participant[i])) {
            return participant[i];
        }
    }

    return participant[i];
}

위 코드로 문제를 해결하였습니다.

 

로직은 단순합니다.

  1. 2개의 배열을 정렬한다. (같은 방식으로, 오름차순으로 했다면 둘 다 오름차순으로 정렬)
  2. 2개의 배열에 만일 같은 이름이 있다면 둘 다 같은 위치에 해당 이름이 존재하게 됨
  3. for문을 사용하여 equals로 문자열을 비교함 (단, 완주자 목록으로 for문을 돌려야 완주자 배열에서 인덱스가 터지지 않음)
  4. 만일 해당 위치에 다른 이름이 존재한다면 해당 이름이 존재하지않음을 뜻하여 바로 return
  5. 완주자를 전부 확인하였음에도 찾지 못하였다면 완주자 목록 그다음에 존재함. 즉, 완주자 목록에 존재하지 않음을 뜻함 (선수 목록이 완주자 목록보다 길이가 더 길다는 것을 의미함). 완주자 목록 길이 + 1 위치에 있는 선수 이름을 선수 목록에서 return

 

위 코드외에도 HashMap를 사용하는 방식도 있으나 배열로 사용하는 방식이 더 깔끔할 것이라 생각이 들어

배열로만 사용하였습니다.

 

이상입니다.