알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

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

programmers.co.kr


Think🤔
package kcue.test;

public class crane {

	public static void main(String[] args) {
		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 };
		int answer = 0;
		String bowl = "";

		for (int i = 0; i < moves.length; i++) {
			int point = moves[i] - 1; // 배열 4번까지이고 , moves에서 1을 선택하면 0의 배열을 고를 수 있도록 -1
			for (int j = 0; j < board[point].length; j++) {
				if (board[j][point] != 0) {
					bowl += String.valueOf(board[j][point]);
					board[j][point] = 0; // 뽑은거 0으로 바꿔줘야함
					break;
				}
			}
		}
		answer = pair(bowl);

		System.out.println(answer);
	}

	public static int pair(String cert) {
		StringBuilder tmp = new StringBuilder(cert);
		int cnt = 0; // 정답 갯수
		for (int i = 0; i < tmp.length(); i++) {
			if (tmp.length() - 1 > i) { // i가 2일떄 +1과 비교하기 떄문에 length가 3이면 0,1,2 이여서 3이 존재 X
				System.out.println("tmp.length() : " + tmp.length());
				System.out.println("i : " + i);
				if (tmp.charAt(i) == tmp.charAt(i + 1)) {
					tmp.deleteCharAt(i);
					tmp.deleteCharAt(i);
					i = i - 2; // i는 제거 됐으므로 다시
					cnt++;
				}
			}
		}
		return cnt * 2;
	}

}

Stack을 구현하지  않고 , for문을 -2 해줌으로써 , 다시 원래 자리에서 반복문을 돌게하는 방법

3개만 통과고 나머지 실패.. 뭐가 문제?

 

ArrayList로 바꾸니 통과 .. 문제점 정확히 모르겠음 .. Stack으로 구현!


Solution✍
import java.util.Stack;
class Solution {
    public int solution(int[][] board, int[] moves) {
		int answer = 0;
		Stack<Integer> stack = new Stack<>();

		for (int i = 0; i < moves.length; i++) {
			int point = moves[i] - 1;
			for (int j = 0; j < board[point].length; j++) {
				if (board[j][point] != 0) {
					stack.push(board[j][point]);
					board[j][point] = 0; // 뽑은거 0으로 바꿔줘야함
                    break; // 인형하나 뽑았으니깐 멈춰줘야 됨.
				}
			}
				
			if(stack.size() > 1){ // 뽑은 인형이 2개 이상일 시 페어가 돼서 없어진다
				int num1 = stack.pop();
				int num2 = stack.pop();
				if(num1 != num2){
					stack.push(num2);
					stack.push(num1);
					continue;
				}else{
					answer += 2;
				}
			}
		}

		return answer;
	}
  }

Review🤩

Stack 좋다


 

+ Recent posts