알고리즘/Programmers

[Programmers_Java] 완주하지 못한 선수

씨네 2021. 6. 8. 17:00
728x90

이 문제는 완주하지 못한 선수는 단 한명이라는 가정이 있어서 난이도가 조금더 쉬워집니다.

동명이이 있을경우만 생각해서 조금 주의하면 될듯합니다.

 

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

제가 처음 생각했던 로직은 위의 코드입니다. 

배열로 받아온 participant와 completion를 for문으로 반복하여 비교해서 같은것이 있으면 완주했다고 가정하고 빈공간으로 바꿔주게 되면 최종적으로 공백이 아닌것이 완주하지 못한 선수가 되겠지요??

 

그런데...

 

이 코드는 정답은 맞지만 효율성에서 통과하지 못하여 사실상 절반만 받았습니다 ㅠㅠ

 

아직 제가 많이 부족하다는 생각을 합니다...

 

그래서 생각해 낸 방법이...

 

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

이 코드는 sort() 함수를 사용해서 정렬은 한다음에 비교를하기때문에 반복문이 덜들어갑니다.

훨씬 효율적이겠죠??

728x90