ABOUT ME

Today
Yesterday
Total
  • 체육복 - 탐욕법
    알고리즘/프로그래머스 2020. 8. 20. 20:40

    문제 :

    출처 : https://programmers.co.kr/learn/courses/30/lessons/42862?language=java

     

    문제를 푸는데 꽤나 오랜 시간이 걸린 문제다.

    나의 해답 

    public int solution(int n, int[] lost, int[] reserve) {
    		int answer = n - lost.length;
    
    		List<Integer> list = new LinkedList<Integer>();
    		for (int lostStd : lost) {
    			list.add(lostStd);
    		}
    
    		List<Integer> reserveList = new ArrayList<Integer>();
    		for (int i : reserve) {
    			if (list.indexOf(i) != -1) {
    				list.remove(list.indexOf(i));
    				answer += 1;
    			} else {
    				reserveList.add(i);
    			}
    		}
    
    		for (int i : reserveList) {
    
    			int previousIdx = list.indexOf(i - 1);
    			int postIdx = list.indexOf(i + 1);
    
    			boolean isExist = false;
    			if (previousIdx != -1) {
    				list.remove(previousIdx);
    				answer += 1;
    				isExist = true;
    				continue;
    			}
    
    			if (!isExist) {
    				if (postIdx != -1) {
    					list.remove(postIdx);
    					answer += 1;
    				}
    			}
    		}
    
    		return answer;
    	}

     

    결과 제출시 5번, 7번 문제에 막혀서 애를 먹었던 제출 코드

    public int solution(int n, int[] lost, int[] reserve) {
            int answer = n - lost.length;
    
            List<Integer> list = new LinkedList<Integer>();
            for(int lostStd : lost) {
            	list.add(lostStd);
            }
            
            for(int i : reserve) {
    
            	if(list.indexOf(i) != -1) {
            		list.remove(list.indexOf(i));
            		answer+=1;
            		continue;
            	}
            	
            	int previousIdx = list.indexOf(i-1);
            	int postIdx = list.indexOf(i+1);
            	
            	boolean isExist = false;
            	if(previousIdx != -1) {
            		list.remove(previousIdx);
            		answer+=1;
            		isExist = true;
            		continue;
            	}
            	
            	if(!isExist) {
            		if(postIdx != -1) {
            			list.remove(postIdx);
            			answer+=1;
            		}
            	}
            }
            
            return answer;
        }

    -> 이 코드가 틀린 이유는 여벌의 체육복을 가진사람이 도난당한 경우, 자기 자신한테 우선적으로 빌려줘야 해서 체크 할 리스트에서 제거 후 확인을 했어야 하는데, 나는 제거를 우선순위로 하지 않고, 체크하면서 제거 작업을 해서 100%의 정답을 얻지 못했다고 생각한다. 

     

    '알고리즘 > 프로그래머스' 카테고리의 다른 글

    기능개발  (0) 2020.09.08
    예산  (0) 2020.09.07
    [1차] 비밀지도  (0) 2020.08.20
    시저암호  (0) 2020.08.12
    완주하지 못한 선수 - Hash  (0) 2020.08.11
Designed by Tistory.