끄적끄적
2019 카카오 개발자 겨울 인턴십크레인 인형뽑기 게임 본문
나는 ArrayList를 통해 바구니를 구현 하였으나 제출 후에 확인해 보니 대부분 스택으로 푸신 것 같다.
난 각 라인 별로 배열를 만들고 이를 다시 Arraylist로 저장하였다. 바구니도 Arraylist로 두어 모든 인형을 바구니에 넣은 뒤 해결하였다.
또 처음 풀었을 때 테스트 케이스 1,2번에서 자꾸 틀리곤 했는데 질문을 참고한 결과 바구니에서 연속 같은 값의 인형을 뽑고 뽑은 인형의 위치보다 앞부분의 인형과 뒷부분의 인형이 같아도 사라져야 하기에, 다시 위치를 초기화해주어야 했다.
[[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 2, 1, 0, 0], [0, 2, 1, 0, 0], [0, 2, 1, 0, 0]]
[1, 2, 3, 3, 2, 3, 1]
4
위의 테스트 케이스를 이용하라고 질문에 올라와 있어서 수정 후 맞출 수 있었다.
올려둔 코드는 테스트를 위해 입력 받는 것까지 구현해 두었다.
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
public class App {
public static void main(String args[]){
Scanner scanner= new Scanner(System.in);
int n= scanner.nextInt();// 라인의 개수
int m=scanner.nextInt(); // 한 라인의 들어갈 인형의 개수
int board[][]=new int[n][m]; // 인형이 들어있는 판
int mv=scanner.nextInt(); // 뽑을 라인의 위치
int moves[]=new int[mv]; // 뽑을 라인의 위치가 들어있는 배열
for(int i=0;i<mv;i++)
moves[i]= scanner.nextInt();
for(int i=0;i< n;i++){
for(int j=0;j<m;j++)
board[i][j]= scanner.nextInt();
}
//위까지 입력 받는 부분
ArrayList<Integer[]> line= new ArrayList<Integer[]>();//각 라인당 리스트만듬
for(int k=0;k<m;k++){
Integer[] list=new Integer[n]; //한 라인의 인형들을 리스트로 저장하기 위한 변수
for(int j=0;j<n;j++) {
list[j]=board[j][k];
}
line.add(list); // 모든 라인을 받음
}
ArrayList<Integer> doll= new ArrayList<>();//바구니에 담긴 인형들
Integer find=0; //바구니에 넣은 인형
int k=0; // 바구니에 넣을 인형의 그 라인에서의 위치
for(int i=0;i< moves.length;i++){
find=0; //이전 값을 초기화
while(find==0 && k!=n){ // 0이면 다음 값을 찾고, 줄 끝까지 0이면 아무 인형도 바구니에 넣지않음
find= line.get(moves[i]-1)[k++]; // 배열의 인덱스는 0부터 시작하므로 1을 뺌
}
line.get(moves[i]-1)[k-1]=0; // 바구니에 넣은 인형에 값은 0으로 바꿔줌
if(find!=0) // 찾은 인형이 존재하면
doll.add(find); //바구니에 인형을 넣음
k=0; // 위치 초기화
}
int answer=0; // 뽑은 인형의 개수
for(int j=0;j<doll.size()-1;j++){ // 다음 값과 비교해주기 위해 전체 보다 하나 작은 값까지 j설정
if(doll.get(j) ==doll.get(j+1)){ //두 인형의 값이 연달아 같으면
doll.remove(j); // 그 위치의 인형을 뽑음
doll.remove(j); // 인덱스가 당겨졌으니 다음 인형의 위치도 같다.
j=-1; //처움 인형부터 다시 비교하기위해 -1로 초기화(j++될것이므로 -1)
answer+=2; // 뽑은 인형 두개를 더해줌
}
}
System.out.println("answer: "+answer);
}
}
'알고리즘' 카테고리의 다른 글
백준 1700 멀티탭 스케줄링 (0) | 2021.04.06 |
---|---|
백준 14719 - 빗물(C++) (0) | 2021.03.31 |
11060: 점프점프 (0) | 2020.08.05 |
백준 2407번 조합 풀이 (0) | 2020.08.04 |
백준 1021 회전하는 큐 (0) | 2020.07.09 |
Comments