본문 바로가기

프로그래머스

프로그래머스 - 완주하지 못한 선수

첫 코드 - 효율성 문제(시간복잡도 [O(n*n)])

class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";

String str;
int cntPart;
int cntComp;

for (int i = 0; i < participant.length; i++) {
str = participant[i];
cntPart = 0;
cntComp = 0;

for (int j = 0; j < participant.length; j++) {
if (str.equals(participant[j])) {
cntPart++;
}
}

for (int j = 0; j < completion.length; j++) {
if (str.equals(completion[j])) {
cntComp++;
}
}

if (cntPart > cntComp) {
answer = participant[i];
break;
}
}

return answer;
}
}


해결 코드 - HashMap 사용 [O(n)]

import java.util.HashMap;

class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";

HashMap<String, Integer> map = new HashMap<>();
int val = 0;

for (String part : participant) {
if (map.get(part) == null) {
map.put(part, 1);
} else {
val = map.get(part) + 1;
map.put(part, val);
}
}

for (String comp : completion) {
val = map.get(comp) - 1;
map.put(comp, val);
}

for (String key : map.keySet()) {
if (map.get(key) == 1) {
answer = key;
}
}

return answer;
}
}



다른사람 코드 - Arrays 사용

import java.util.Arrays;

class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";

Arrays.sort(participant);
Arrays.sort(completion);

for (int i = 0; i < completion.length; i++) {
if (!participant[i].equals(completion[i])) {
answer = participant[i];
break;
}
}

return answer;
}
}