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
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers_Java] 체육복 (0) | 2021.07.25 |
---|---|
[Programmers_Java] 숫자 문자열과 영단어 - 2021 카카오 채용 연계형 인턴십 (0) | 2021.07.22 |
[Programmers_Java] 로또의 최고 순위와 최저 순위 (0) | 2021.07.21 |
[Programmers_Java] 폰켓몬 (0) | 2021.07.20 |
[Programmers_Java] 키패드누르기(카카오 인턴십) (0) | 2021.07.19 |