Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 알고리즘
- 카카오블라인드코딩테스트
- React
- Array
- 완전탐색
- programmers
- SWEA
- Stack
- dfs
- ReactJS로 영화 웹 서비스 만들기
- BOJ
- Algorithm
- 인플레이션에서 살아남기
- 달빛클럽
- 재귀
- 경제공부
- 리액트
- 백준
- 달빛클럽1기
- React.js
- 프로그래머스
- 자바
- SoftwareExpertAcademy
- 노마드코더 강의
- 달빛클럽 1기
- 노마드코더
- 달빛캠퍼스
- JPA
- Java
- HashMap
Archives
- Today
- Total
th42500의 TIL
[Java] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임 본문
https://programmers.co.kr/learn/courses/30/lessons/64061?language=java
코딩테스트 연습 - 크레인 인형뽑기 게임
[[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]] [1,5,3,5,1,2,1,4] 4
programmers.co.kr
알고리즘을 공부하기 전에는 풀지 못했던 어려웠던 문제인데, 지금은 20분도 안걸려서 풀어내는 쉬운 문제가 되어 버렸다.
✔ 입출력 예시
💡 포인트
1️⃣ 게임화면에서 크레인이 움직이는 위치는 1번부터 시작
2️⃣ 인형이 없는 곳(0)에서는 크레인을 작동시켜도 아무런 일도 일어나지 ❌
3️⃣ 사라지는 인형은 크레인으로 들어올린 인형과 바구니 제일 상단 위에 있는 인형 2개
❓ 풀이과정
1️⃣ 이중 for문을 이용하여 밖의 for문으로는 moves를 순회하도록, 안의 for문으로는 board의 [moves[i]]열을 순회
2️⃣ 1️⃣의 순환 과정 중 인형(0이 아닌 수)이 크레인에 잡힌다면 안의 for문 break
3️⃣ 2️⃣에서 선택된 인형이 stack의 최상단과 일치한다면 pop(), 아니라면 push()
4️⃣ pop()할 때는 선택된 인형과 stack의 최상단의 인형 모두 사라짐
✔ 소스코드
import java.util.Arrays;
import java.util.Stack;
public class Solution { // 크레인 인형뽑기 게임
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};
System.out.println(solution(board, moves));
}
private static int solution(int[][] board, int[] moves) {
int answer = 0; // 사라진 인형 수
Stack<Integer> bucket = new Stack<>();
for (int i = 0; i < moves.length; i++) {
int select = 0;
for (int j = 0; j < board.length; j++) {
if(board[j][moves[i]-1] != 0) {
select = board[j][moves[i]-1];
board[j][moves[i]-1] = 0;
break;
}
}
if(!bucket.isEmpty() && select == bucket.peek()) {
bucket.pop();
answer+=2;
}else if(select != 0){
System.out.println(select + "push");
bucket.push(select);
}
// 확인
for (int j = 0; j < board.length; j++) {
System.out.println(Arrays.toString(board[j]));
}
System.out.println("----------------------------------");
System.out.println(bucket);
System.out.println(answer);
System.out.println("==================================");
}
return answer;
}
}
크레인과 stack이 모두 잘 작동하는지 확인하기 위해 출력해보았다.
✨ 확인 결과
위와 같이 잘 작동하는 것을 확인할 수 있다 😀
'Algorithm > Programmers' 카테고리의 다른 글
[Java] 프로그래머스 해시 Lv1 - 폰켓몬 (0) | 2022.04.04 |
---|---|
[Java] 2021 KAKAO BLIND RECRUIMENT- 신규 아이디 추천 (0) | 2022.03.28 |
[Java] 2021 KAKAO BLIND RECRUITMENT - 메뉴리뉴얼 (0) | 2022.03.22 |
[Java] 2019 KAKAO BLIND RECRUITMENT - 오픈채팅방 (0) | 2022.03.17 |
[Java] 해시 - 전화번호 목록 (Lv2) (0) | 2022.03.02 |
Comments