복습 6

2020-04-17

복습 6

프로그래머스 스킬체크 테스트 2

  1. 트럭(Queue)

    불과 그제풀고, 어제 복습했던 문제인데도 10분컷을 하지 못했다…

    일단 조건은 제대로 맞추었으나!

    트럭을 더 적재하는 부분의 조건에서 idx를 넘어가지 않는다는 조건을 걸어주지않아서… 헤맴!

                    if(idx<truck_weights.length){
                        int w = 0;
                        for(int i=0; i<trk.size(); i++){
                            w += trk.get(i).wei;                    
                        }
                       
                        if(w + truck_weights[idx] <=weight){
                        trk.add(new truck(truck_weights[idx],1));
                        idx++;
                        }
                    }
    
  2. 조이스틱 (Greedy)

    참으로 오랜만인 문제!

    • 제일 오래걸리는 건 끝까지 다 가는 것! or
    • 현재위치에서 다시 0위치로가서 (i+i) , 맨뒤로가서 (len), A를 만나기 직전까지!(next)
    • 따라서 i+i+len-next

    또, 맨끝까지가서는 비교할 필요가 없으니 for문은 len-1까지만 돌아준다!

    static public int solution(String name) {
            int answer = 0;
            for(int i = 0; i<name.length(); i++) {
            	if(name.charAt(i) -'A' <13)
            		answer += name.charAt(i)- 'A';
            	else
            		answer += 'Z' - name.charAt(i)+1;
            }
               
            int min_move = name.length()-1;
            for(int i=0; i<name.length()-1; i++) {
            	int next = i+1;
               	
            	while(next<name.length() && name.charAt(next) == 'A')
            		next++;
               
            	min_move = Math.min(min_move, (i+name.length()) + i-next);	
            }
            return answer + min_move;
    }