[2020-11-03] 크레인 인형뽑기 게임

2020. 11. 4. 10:30·코딩테스트

푼 시간 : 3시간

언어 : 자바

 


 

programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[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

 

문제를 풀기 위해 처음 생각 했던것은 조건이었다.

같은것이 2개 만나면 터지는 조건으로 애니팡과 비슷한 조건이었다.

 

배열을 하나 만들어, 인형들을 집어넣을 칸을 만든 뒤 인형을 터트릴때에 카운트를 뒤로

물리는것에 대한 생각을 정말 많이 했다. 효율적으로 쓰고싶어 s를 만드는 것에 대한 생각이 먼저 떠올랐지만 계속 다른 방법을 생각했으나 도저히 떠오르지 않아 그냥 s를 만들어 인형이 들어오고 터질때의 카운트를 만들어줬다.

 

k번째 인형과 k-1번째 인형이 같은지 보기위해 생각하다보니 k를 1부터 설정해야 배열 범위상 오류가 나지않았고,

else if를 a[s-1]!=0으로 설정한 이유는 혹시라도 0번째부터 시작할 일이 없도록 설정한것이다.

터지고나서 s에 넣을것을 처음에는 단순히 s--로 했으나,

너무 1차원적인 생각이란것을 깨닫는데는 시간이 채 걸리지않았다. 얼른 s=k-1로 수정하고 풀었던 것 같다

 

풀면서 계속 Hash를 쓰고싶은 생각을 했지만 Hash는 아직 이해를 완전하게 하지 못해서 그냥 맨땅에

헤딩하듯이 배열로 풀었다. Stack을 쓰거나 Hash를 썼으면 더 시간이 적게 걸렸으리라 생각된다.

효율적으로 풀고싶다는 마음에 구상도 오래걸리고

막상 만들다보니 효율적이지 않고 허술해 시간 허비가 많았던 것 같다.

 

class Solution {
	public int solution(int[][] board, int[] moves) {
		int answer = 0;
		int s=0;								
        // a[]에 몇개가 들어가있는지 카운트
		int a[]=new int[moves.length];			
        // board[][]의 인형이 들어갈 변수

		for(int i=0; i<moves.length; i++){
			for(int j=0; j<board.length; j++){
				if(board[j][moves[i]-1]!=0){
					a[s]=board[j][moves[i]-1];	
                    // [moves[i]-1]를 해야 배열순서에 맞춤
					s++;						
                    // 인형 넣으면 카운트
					board[j][moves[i]-1]=0;		
                    // 인형을 뽑았으니 0
					break;
				}
			}
            
            if(a[0]==0)
                continue;						
                // 0이면 카운트 X
            
			else if(a[s-1]!=0) {
				for(int k=1; k<a.length; k++) {
					if(a[k]==0)					
                    	// 0이면 break x
						break;
					else if(a[k]==a[k-1]) {
						a[k]=0;
						a[k-1]=0;
                        
						s=k-1;					
                     	// k번째와 k-1번째가 같다면 k-1부터
						answer+=2;
					}
				}
			}
		}

		return answer;
	}
}

 

카카오는 항상 문제부터 읽기가 어려워서 복잡 한 것 같다..ㅎㅎ

'코딩테스트' 카테고리의 다른 글

[2020-11-10] 문자열 내 p와 y의 개수  (0) 2020.11.10
[2020-11-09] 문자열 내 마음대로 정렬하기  (0) 2020.11.10
[2020-11-05] 나누어 떨어지는 숫자 배열  (0) 2020.11.05
[2020-11-05] 같은 숫자는 싫어  (0) 2020.11.05
[2020-11-04] 2016년  (0) 2020.11.04
'코딩테스트' 카테고리의 다른 글
  • [2020-11-09] 문자열 내 마음대로 정렬하기
  • [2020-11-05] 나누어 떨어지는 숫자 배열
  • [2020-11-05] 같은 숫자는 싫어
  • [2020-11-04] 2016년
jun96
jun96
프로그래밍 공부
  • jun96
    jun의 공부노트
    jun96
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • Spring (6)
        • 개념 (3)
        • 에러 (1)
      • Java (1)
      • Book (20)
        • 모던 자바 인 액션 (12)
        • 디자인 패턴의 아름다움 (7)
      • Algorithm (1)
      • 코딩테스트 (35)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 이력서
  • 공지사항

  • 인기 글

  • 태그

    자바
    스프링
    아직 미완성
    백준
    프로그래머스
    aws에 배포하기
    datetime
    최프
    알고리즘
    디자인패턴의아름다움
    전자정부프레임워크
    Java
    DeepDive
    aws배포
    모던자바인액션
    wikidocs
    python설치
    도커컨테이너빌드업
    Algorithm
    junit5
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jun96
[2020-11-03] 크레인 인형뽑기 게임
상단으로

티스토리툴바