프로그래머스[초급]
2개의 배열이 주어지며, 1개의 배열에는 참가자, 다른 1개의 배열에는 완주자의 목록이 담겨있다
이 배열을 확인하여 완주자 목록에 존재하지 않은 사람을 찾아서 리턴하라
문제 해결간에 에러가 발생했는데 그 이유는 다음과 같다.



Arrays.asList() 를통해서 참가자의 배열을 List로 바꿔서 완주자의 이름이 포함되어 있을경우 삭제하는 코드를 짜는 도중에
UnsupportedOperationException이 발생했다
해당 예외는 다음과 같다...
asList로 List를 생성할시 해당 list가 고정되어 있어 요소를 제거하거나, 추가하거나 하면 발생하는 에러였다.
그래서 해결방법으로
List<String> list = new ArrayList<String>(Arrays.asList(participant)); 를 통해서 생성해줬다.
ArrayList의 생성자중에 Collection을 매개 변수로 넣는 생성자가 있다


테스트는 통과했지만 효율성 테스트에서 통과하지 못했다....
힌트를 보고서 내가 풀 풀이는

주어진 배열을 정렬 한다음에
두 배열을 0부터 비교하여 서로 값이 다를경우 리턴해주고, 만약에 해당 요소가 맨 마지막에 있을경우는
참가자의 맨 마지막 요소를 리턴하도록 했다.
============================================================================================
다른 사람의 풀이법으론
HashMap을 사용한 풀이법이 있었다.

HashMap을 사용해서
키값에 참여자를 넣고, 값에는 getOrDefault를 통해서 동명이인이 있을경우
해당 키값의 값을 꺼내와서 +1 을 하고
해당 키가 없다면 디폴드 값인 0 을가지고 와서 +1 한다
그다음 완주자를 동일한 방법으로 참여자에서는 +1 했던것을
-1 씩 해준다
그러면 Map에는 동명이인이 있을경우 해당 이름은 +1 일것이고 나머지는 0
혹은 완주자에 이름이 없는 경우는 0이 될것이다
이때 +1 일 사람의 이름을 리턴해주는 방법이다
getOrDefault( key, defulat valeu);
key값이 있다면 해당 key값의 값을 가져오고
해당 key값이 맵핑되어 있지 않다면 defaultValue를 사용한다,.
'Algorithm' 카테고리의 다른 글
[Algorithm] 가장 점수가 높은 사람을 리턴 하라 (0) | 2022.06.02 |
---|---|
[Algorithm] K번째 숫자 (0) | 2022.06.01 |
[Algorithm/Lamda] 함수형 인터페이스 (0) | 2022.05.28 |
[Algorithm/Lamda] Lamda식에 대해 공부해보자 (0) | 2022.05.28 |
[Algorithm] 주어진 배열에서 3개 값을 더해 소수인 경우를 구해라 (0) | 2022.05.28 |