알고리즘 풀이 방법입니다.
문제(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 좋다
'Algorithm' 카테고리의 다른 글
[프로그래머스] 코딩테스트 연습2022 KAKAO BLIND RECRUITMENT신고 결과 받기 (0) | 2022.10.17 |
---|---|
[프로그래머스] 2022 KAKAO TECH INTERNSHIP성격 유형 검사하기 (0) | 2022.09.28 |
[프로그래머스] 키패드 누르기 (0) | 2022.08.10 |
[프로그래머스] 음양 더하기 (0) | 2022.08.08 |
[프로그래머스] 없는 숫자 더하기 (0) | 2022.08.08 |