Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 시큐리티
- Spring
- 프로그래머스
- error
- Git
- 방법
- JPA
- GitHub
- aws
- 오라클
- 스프링
- 함수
- mybatis
- JavaScript
- 알고리즘
- 쿼리
- jquery
- 자바
- 넥사크로
- Eclipse
- IntelliJ
- Java
- Vue
- kotlin
- 생성
- 에러
- Security
- db
- 코틀린
- oracle
Archives
- Today
- Total
송민준의 개발노트
프로그래머스 - 크레인 인형뽑기 게임(카카오) 본문
programmers.co.kr/learn/courses/30/lessons/64061?language=java
2차원 배열을 뽑기상자라고 보고 뽑기를 실행한만큼 Stack에 담아서 위아래 두 인형이 같으면 터트리는 게임.
Stack을 선택한 이유는 뽑기결과가 계속해서 쌓인다는 점과 최상단의 값을 활용해야 해서임.
import java.util.Stack;
/**
* 4, (3, (1, 1), 3), 2, 4
* (4, (3, (1, 1), 3), (2, 2), 4)
*/
public class CraneDollDrawGame {
public static int solution(int[][] board, int[] moves) {
// 1. 그릇
int answer = 0;
Stack<Integer> stack = new Stack<>();
// 2.
// 뽑기 실행
for(int popIndex = 0; popIndex < moves.length; popIndex++) {
int pop = moves[popIndex]-1;
// 각 섹터별(열) 위에서부터(행) 탐색
for(int height = 0; height < board.length; height++) {
int target = board[height][pop];
if(target == 0) {
continue;
}
// 0이 아니면 뽑았다고 봄
board[height][pop] = 0;
// 장바구니의 최상단이 뽑은거랑 같으면 pop, count++2
if(!stack.isEmpty() && target == stack.peek()) {
stack.pop();
answer+= 2;
break;
}
// 다르면 계속 push
stack.push(target);
break;
}
}
return answer;
}
}
다른 사람들의 풀이를 보니 나의 풀이와 비슷하긴 한데 stack에 push, pop 하는 부분만 조건문 순서가 조금 달랐던 것 같다.
ArrayList로 담아서 마지막에 for문 돌려서 앞뒤 같으면 삭제하던 풀이도 있고...
아래는 테스트 케이스다. 주어진 케이스보다 하나 더 해봤다.
import org.junit.Test;
import static org.junit.Assert.*;
public class CraneDollDrawGameTest {
@Test
public void solution() {
//given
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};
//when
int solution = CraneDollDrawGame.solution(board, moves);
//then
assertEquals(4, solution);
}
@Test
public void solution2() throws Exception {
//given
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, 2, 1, 4};
//when
int solution = CraneDollDrawGame.solution(board, moves);
//then
assertEquals(8, solution);
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 두 개 뽑아서 더하기 (0) | 2021.01.31 |
---|---|
프로그래머스 - 스킬트리 (0) | 2021.01.29 |
프로그래머스-level2-영어 끝말잇기 (0) | 2019.12.09 |
프로그래머스-level2-라면공장 (0) | 2019.12.05 |
프로그래머스-level2-전화번호 목록 (0) | 2019.12.02 |