개발/코딩

[프로그래밍] 프로그래머스 예제문제 풀어보기 <완주하지 못한 선수> 1차시도 실패

mabb 2022. 5. 23. 16:10
반응형

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.ArrayList;
import java.util.Arrays;
 
class Solution {
    public String solution(String[] participant, String[] completion) {
        
        ArrayList<String> participantArray = new ArrayList<>(Arrays.asList(participant));
        ArrayList<String> completionArray = new ArrayList<>(Arrays.asList(completion));
        
        for(String completor:completion){
            for(int i= 0 ; i < participantArray.size() ; i++ ) {
                if(participantArray.get(i).equals(completor)) {
                    participantArray.remove(i);
                    break;
                }
            }    
        }
      
        String answer = participantArray.get(0);
        return answer;
    }
}
cs

 

 

HashMap, ArrayList, LinkedList 속도 비교 :: Sentio, ergo sum (tistory.com)

 

HashMap, ArrayList, LinkedList 속도 비교

인공지능 과제에서 인덱싱을 하면서 무심코 HashMap을 사용했는데, 다른 조의 시연을 보니 인덱싱에 상당한 시간이 소요되었다. 갑자기 궁금증이 생겨서 세 컬렉션의 속도를 비교하게 되었다. 테

nnoco.tistory.com

구글링 중 다른 블로거님의 포스팅을 참고하니 ArrayList는 삭제속도가 굉장히 느리다고 한다.


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
import java.util.HashMap;
import java.util.Arrays;
 
class Solution {
    public String solution(String[] participant, String[] completion) {
        
        HashMap<Integer,String> participantHashMap = new HashMap<>();
        
        for(int i = 0 ; i < participant.length ; i ++){           
            participantHashMap.put(i,participant[i]);         
        }
        
         System.out.println(participantHashMap.toString());
        for(String completor:completion){
            for(int j = 0 ; j < participant.length ; j++){
                if(completor.equals(participantHashMap.get(j))){
                    participantHashMap.remove(j);
                    break;
                }
            }
        }
 
        
        String answer = participantHashMap.get(participantHashMap.keySet().toArray()[0]);
        return answer;
    }
}
cs

해쉬맵으로 변경했으나 여전히 실패

 

 

정렬을 이용해서 알고리즘을 수정하여 성공. 해쉬맵으로는 어떻게 해야 통과할 수 있을까.

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
import java.util.*;
 
class Solution {
    public String solution(String[] participant, String[] completion) {
 
    
  
        completion = Arrays.copyOf(completion,completion.length+1);
        completion[completion.length-1= "000"//길이를 맞추기 위함
        
    
        
        Arrays.sort(participant,Collections.reverseOrder());
        Arrays.sort(completion,Collections.reverseOrder());
    
        
        String answer = "";
 
        for(int i =0 ; i <participant.length ; i++){
            if(!(participant[i].equals(completion[i]))){
                answer = participant[i];
                break;
            }
 
                // System.out.println(participant[i] + " : " + completion[i]);
    
    } 
 
        
    
    return answer;
    }
}
cs

 

반응형