https://school.programmers.co.kr/learn/courses/30/lessons/64061?language=java 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

푸는데 1시간 30 분 걸렸는데 에러 잡느라 1시간은 걸렸습니다..

 

기억해야할것들


첫번째. 문제의 입력값, 주어진 값들을 완벽히 생각합니다.
int[] moves의 값들이 col에서 index가 0에서 시작한것이 아니라 1 2 3 4 5 이다.. 즉, -1을 해줘야한다는것.

 

두번째. 문제를 완벽히 이해하고 함수를 짭니다. 이번에 값 갱신을 중간에 진행하여 안됬습니다.
크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.
문제 상에 보듯이 크레인을 "모두 작성시킨 후" 이다. 나는 작성 도중에 진행하여 1개씩 되있는것은
폭파되지 않아서 안됫을 것이다.

 

세번째. ArrayList에서 remove 사용시 범위에 항상 유의해야합니다.

아래코드를 보면, 각종 처리를 다 한것을 볼 수 있습니다..

ArrayList sort() 하거나 remove() 할시에는 항상 범위를 유의해야 런타임에러가 안뜹니다.

if( i >= 0 && i < result.size() - 1){
    int temp = result.get(i);                
    int startindex = i+1;
    boolean flag = false;
    while(true){
        if(temp == result.get(startindex) ){
            flag = true;
            result.remove(startindex);
            answer += 1;

            if(startindex == result.size()){
                break;
            }
        }else{
            break;
        }
    }

 

 

import java.util.*;
import java.io.*;

class Solution {
    
    static int N=0;
    static ArrayList<Integer> result = new ArrayList<>();
    static int resultsizeindex=0;
    static int answer = 0;
    public int solution(int[][] board, int[] moves) {
        N=board.length;
        System.out.println(result.size()+1);
        for(int i=0;i<moves.length;i++){
            pick(board, moves[i]-1);
        }
        
        for(int i=0;i<result.size();i++){
            System.out.print(" "+result.get(i));
            
        }

        for(int i=0;i<result.size()-1;i++){
            
           
            if( i >= 0 && i < result.size() - 1){
                int temp = result.get(i);                
                int startindex = i+1;
                boolean flag = false;
                while(true){
                    if(temp == result.get(startindex) ){
                        flag = true;
                        result.remove(startindex);
                        answer += 1;
                        
                        if(startindex == result.size()){
                            break;
                        }
                    }else{
                        break;
                    }
                }
                if(flag == true){
                    result.remove(i);
                    answer += 1;
                    i-=2;
                }
            }
            
        }
        
        
        return answer;
    }

    
    public static void pick(int[][] board, int col){
        for(int row=0;row<board.length;row++){
            if( board[row][col] != 0){
                result.add(board[row][col]);
                
                board[row][col] = 0;
                break;
            }
        }
    }
}

+ Recent posts