TMI개발일기
완주하지 못한 선수(효율성 실패) 본문
코딩 테스트의 문제 완주하지 못한 선수를 풀어보았다.
programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package Unfinished_player;
import java.util.ArrayList;
class Solution2 {
//효율성 0점..... 10만명의 마라토너를 모두 비교하기에는 list의 효율이 구리다. 매번 값을 지우고 당기고 해야되서
public String solution(String[] participant, String[] completion) {
ArrayList<String> unfinished = new ArrayList<String>();
for(String in : participant) {
unfinished.add(in);
}
for(int i=0;i<completion.length;i++) {
int count=0;
for(int j=0;j<completion.length;j++) {
if(participant[i].equals(completion[j])) {
unfinished.remove(0);
completion[j]=null;
break;
}
count++;
}
if(count==completion.length) break;
}
String answer = unfinished.get(0);
return answer;
}
}
public class player2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String []participant = {"mislav", "stanko", "mislav", "ana"};
String []completion ={"stanko", "ana", "mislav"};
String []participant2 = {"marina", "josipa", "nikola", "vinko", "filipa"};
String []completion2 ={"josipa", "filipa", "marina", "nikola"};
Solution2 a = new Solution2();
System.out.println(a.solution(participant, completion));
}
}
|
cs |
ArrayList를 사용해서 participant배열의 value를 저장시키고 완주한 선수들을 비교해서 remove 명령어로 지웠더니
정확성 측면에서는 100점이지만 효율성 측면에서는 0점을 맞았다.
그럴만도 한게 문제에서 보면 참가자들은 최대 10만명까지 있는데 arraylist는 중간에 value를 지우면 이후 데이터는 빈
곳을 채우기 위해서 앞으로 당겨지기 때문에 만약 index 3의 데이터가 완주한 선수라면 99997개의 데이터가 왼쪽으로
이동해야 할 것이다. 이는 알고리즘에서 Time complexity를 증가 시키기 때문에 돌아가지만 좋지못한 코드가 된다.
만약 전자사전에서 zoo를 검색하는데 오랜시간이 걸린다면 아무도 그 사전을 이용하지 않을 것이다. 자바는 Time
complexity를 줄이는 방안으로 순서에 구애받지 않는 hash를 구현해놨다. 이를 활용해서 문제를 다시 풀어보자.
'CordingTest' 카테고리의 다른 글
ID입력하기 (0) | 2021.03.26 |
---|---|
완주하지 못한 선수(Solution.ver) (0) | 2021.03.21 |
두 개 뽑아서 더하기(solution.ver) (0) | 2021.03.16 |
두 개 뽑아서 더하기 (0) | 2021.03.16 |
크레인 인형뽑기 (0) | 2021.03.15 |