본문 바로가기
알고리즘

[Algorithm] 5월 23일 알고리즘 연습

by eigen96 2022. 5. 23.
728x90

 

Lv. 1 크레인 인형뽑기 게임 - 성공

참고할만한 풀이


import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        for (int move : moves) {
            for (int j = 0; j < board.length; j++) {
                if (board[j][move - 1] != 0) {
                    if (stack.isEmpty()) {
                        stack.push(board[j][move - 1]);
                        board[j][move - 1] = 0;
                        break;
                    }
                    if (board[j][move - 1] == stack.peek()) {
                        stack.pop();
                        answer += 2;
                    } else
                        stack.push(board[j][move - 1]);
                    board[j][move - 1] = 0;
                    break;
                }
            }
        }
        return answer;
    }
}

내 풀이

import java.io.*;
import java.util.*;
public class Solution {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int[][] board = {{0,0,0,0,0},
		             {0,0,1,0,3},
		             {0,2,5,0,1},
		             {4,2,4,4,2},
		             {3,5,1,3,1}};
		int[] moves = {1,5,3,5,1,2,1,4};
		
		Solution.solution(board, moves);
		
	}
	public static int solution(int[][] board, int[] moves) {
        int answer = 0;
        
        int N = board.length;
        
        ArrayList[] arr = new ArrayList[N];
        
        for(int i = 0 ; i < N ; i++) {
        	arr[i] = new ArrayList<Integer>();
        }
        // 인형 라인 할당.
        for(int i = 0; i < N ; i++) {
        	for(int j = 0; j < N ; j++) {
        		//0은 제외해야함
        		if(board[i][j] != 0) {
        			arr[j].add(board[i][j]); //맨 마지막에 바닥 인형 -> 처음 인덱스 인형부터 꺼내야함
        		}
        		
        	}
        }
        //인형 담을 바구니
        ArrayList<Integer> basket = new ArrayList();
        int count = 0;
        //라인별로 인형뽑기 MOVES에 맞춰서
        for(int lineNumber : moves) {
        	int line = lineNumber -1;
        	Integer number = 0;
        	if(arr[line].size() != 0) {
        		number = (Integer) arr[line].get(0);
        	}else {
        		//인형이 없는 라인이라면 패스
        		continue;
        	}
        	
        	arr[line].remove(0); // 뽑은 인형 지우기 -> 메소드 까먹음 주의
        	basket.add(number); //바구니에 담음\
    		// System.out.println(number);
    		
        	
        }
        count = Solution.deleteDup(basket);
        
        // System.out.println("count is : " + count);
        
        answer = Solution.deleteDup(basket);
        // System.out.println(answer);
        return count;
    }
	
	public static int deleteDup(ArrayList<Integer> list) {
		boolean copy = false;
		int count =  0; 
		Integer previous = 0;
		while(!copy) {
			copy = true;
			for(int i = 0; i < list.size(); i++) {
				Integer number = list.get(i);
				if(i < list.size()-1) {
					Integer nextNumber = list.get(i+1);
					if(number == nextNumber) {
						list.remove(i);
						list.remove(i);
						// System.out.println("같은 수는 : " + number);
						count = count + 2;
						copy = false;
						break;
					}
				}
			}
			if( copy == true) {
				continue;
			}
			
			
		}
		return count;
	}
	

}

 

 

 

728x90

댓글