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];
}
위 코드로 문제를 해결하였습니다.
로직은 단순합니다.
- 2개의 배열을 정렬한다. (같은 방식으로, 오름차순으로 했다면 둘 다 오름차순으로 정렬)
- 2개의 배열에 만일 같은 이름이 있다면 둘 다 같은 위치에 해당 이름이 존재하게 됨
- for문을 사용하여 equals로 문자열을 비교함 (단, 완주자 목록으로 for문을 돌려야 완주자 배열에서 인덱스가 터지지 않음)
- 만일 해당 위치에 다른 이름이 존재한다면 해당 이름이 존재하지않음을 뜻하여 바로 return
- 완주자를 전부 확인하였음에도 찾지 못하였다면 완주자 목록 그다음에 존재함. 즉, 완주자 목록에 존재하지 않음을 뜻함 (선수 목록이 완주자 목록보다 길이가 더 길다는 것을 의미함). 완주자 목록 길이 + 1 위치에 있는 선수 이름을 선수 목록에서 return
위 코드외에도 HashMap를 사용하는 방식도 있으나 배열로 사용하는 방식이 더 깔끔할 것이라 생각이 들어
배열로만 사용하였습니다.
이상입니다.
'공부 > 알고리즘, 자료구조' 카테고리의 다른 글
[프로그래머스] 기능개발 (0) | 2022.02.14 |
---|---|
[프로그래머스] K번째 수 (0) | 2022.02.12 |
[프로그래머스] 베스트 앨범 (0) | 2022.02.11 |
[프로그래머스] 위장 (0) | 2022.02.10 |
[프로그래머스] 전화번호 목록 (0) | 2022.02.09 |