마이의 개발 블로그

[프로그래머스] 완주하지 못한 선수 (Java) 본문

코딩테스트/프로그래머스

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

개발자마이 2022. 2. 24. 19:22
반응형

 

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

문제상황요약

- 참가자명단(participant)의 길이가 완주자명단(completion)의 길이보다 1이 길다

   -> 두 배열을 비교하며 completion에 없는 한 명만 찾으면 된다

- 동명이인이 있을 수 있다

 

유의사항

- 두 배열을 정렬먼저 하고 시작하면 비교가 쉬워진다

- 정렬 이후 비교 시 동명이인의 존재 여부는 신경쓸 필요가 없어진다

- 한 명만 찾으면 되기 때문에 명단에서 누군가를 삭제하거나 찾았다는 표시를 할 필요도 없다

 

작성 코드

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        
        Arrays.sort(participant);
        Arrays.sort(completion);
        
        int i=0;
        for(; i<completion.length; i++)
            if(!completion[i].equals(participant[i]))
                break;
        
        return participant[i];   
    }
}

 

Note

처음에는 두 배열을 비교한 후에 완주자명단이 참가자명단에 있는지 여부를 일일이 체크했다(이중 for문 사용). 이렇게 접근하니 정답은 쉽게 찾아졌는데 효율성에서 통과가 안 되었고, 조금 찾다보니 배열 한 바퀴만 돌면 해결되는 문제라는 걸 깨닫고는 조금 부끄러워졌다. 며칠만에 프로그래머스 레벨1을 다 몰아서 풀려다보니 생각보다 효율성 문제로 통과되지 않는 것들이 몇 개 있어서(특히 카카오 문제들) 익숙하지 않은 방법들을 좀 더 참고해서 다양하게 문제를 풀어낼 수 있어야겠다는 생각이 든다.

반응형
Comments