뚜벅이!
Mobile :)
뚜벅이!
전체 방문자
오늘
어제
  • 분류 전체보기 (53)
    • 코딩테스트 (16)
      • programmers level1 (7)
      • codility (9)
    • 프로그래밍 공부 (31)
      • Spring Boot (6)
      • Nuxt.js (5)
      • Node.js (3)
      • Etc (11)
      • Android (6)
    • 잡다한 글 (4)
    • 토이프로젝트 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • level1
  • Vue.js
  • nuxt
  • programmers
  • Jetpack
  • lesson2
  • NavBar
  • 스킬체크테스트
  • ad
  • 프로그래머스
  • Notification
  • javascript
  • Spring
  • 연습
  • node.js
  • lesson3
  • Vue
  • codillity
  • 부트
  • Spring boot
  • lesson4
  • firebase
  • Kotlin
  • node
  • token
  • docker
  • JS
  • 초보자
  • AndroidX
  • nuxt.js

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
뚜벅이!

Mobile :)

[kotlin] 프로그래머스 level1 - 크레인 인형뽑기 게임
코딩테스트/programmers level1

[kotlin] 프로그래머스 level1 - 크레인 인형뽑기 게임

2020. 11. 11. 11:25
728x90

 

 

우선적으로 크레인이 어느지점까지 내려가야 하는지 알아볼 필요가 있었다.

 

board는 2차배열이기 때문에 세로의 길이는 board의 length로 확인할수 있고, 가로는 moves에 있기때문에

board.length 만큼 반복문을 돌려서 크레인이 제일 하단까지 확인할 수 있게끔 할수 있다.

 

또한 moves는 몇번째의 가로 인덱스인지 알려주는 역할도 있지만, 더불어 크레인이 몇번 작동하는지도 알수 있다.

그렇기에 크레인이 작동하는 횟수만큼의 반복문과 크레인이 최하단까지 갈 수 있는 반복문 총 2개가 필요하다

 

 

 

우선, 크레인의 반복 횟수와 내려가는 만큼의 반복문을 만든다면


//크레인의 작동 횟수
moves.forEach { move ->
    //board의 길이
    board.forEachIndexed{ index, _ ->
    }
}

이런식의 틀이 맞추어질 것이고,

여기서 조건문으로 크레인이 내려가는도중 board의 값이 0이 아닐경우 바구니에 넣어두는 코드가 필요할 것이다.

더하여 바구니에 넣었다면 해당 board는 인형이 비어있게 되니 0으로 세팅해준다.

 


var tmp: ArrayList = arrayListOf()
//크레인의 작동 횟수
moves.forEach { move ->
    //board의 길이
    board.forEachIndexed{ index, _ ->
        val value = board[index][move-1]
        //board가 비어있는 값이 아니라면
    	if(value != 0){
            tmp.add(value)
            board[index][move-1] = 0
        }
    }
}

var tmp: ArrayList<Int> = arrayListOf()

문제속 바구니값의 변수를 만들어주고,

0이 아닐때 넣어주는 코드가 완성된다.

 

 

 

이제 바구니에 있는 인형이 이전에 뽑았던 인형과 같은 인형이라면 사라져야 하므로 이전값과 비교해주는 구문을 넣어주도록 하자


var tmp: ArrayList = arrayListOf()
//크레인의 작동 횟수
moves.forEach move@{ move ->
    //board의 길이
    board.forEachIndexed{ index, _ ->
        val value = board[index][move-1]
        //board가 비어있는 값이 아니라면
    	if(value != 0){
            //tmp의 lastIndex를 가져올때 빈값이라면 에러나므로 분기문에 추가해준다.
            if(tmp.size > 0 && tmp.get(tmp.lastIndex) == value){
            	tmp.removeAt(tmp.lastIndex)
                answer++
            }else{
                //바구니에 같은 인형이 없는경우 추가해주기
            	tmp.add(value)
            }
            board[index][move-1] = 0
            return@move
        }
    }
}

이렇게 바구니의 값과 비교하는 조건문을 넣어주고, 이중반복문이기때문에 크레인이 인형이있는곳에서 멈추게하기 위하여

반복문에 인덱스 @move 를 걸어주고 진행한다.

 

 

인형이 사라진다면 두개가 사라지므로 answer 에 *2 를 해주어 갯수를 맞춰주면 끝!

728x90
저작자표시 (새창열림)

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

[kotlin] 프로그래머스 level1 - 스킬 체크 테스트 2  (0) 2020.11.11
[kotlin] 프로그래머스 level1 - 스킬 체크 테스트  (0) 2020.11.11
[Java script] 프로그래머스 level1 - 모의고사  (0) 2019.06.17
[Java Script] 프로그래머스 level1 - 2016년  (2) 2019.06.12
[Java script] 프로그래머스 level1 - 완주하지 못한 선수  (0) 2019.06.09
    '코딩테스트/programmers level1' 카테고리의 다른 글
    • [kotlin] 프로그래머스 level1 - 스킬 체크 테스트 2
    • [kotlin] 프로그래머스 level1 - 스킬 체크 테스트
    • [Java script] 프로그래머스 level1 - 모의고사
    • [Java Script] 프로그래머스 level1 - 2016년
    뚜벅이!
    뚜벅이!
    2022. 4년차 안드로이드 개발자 wndnjs19@gmail.com

    티스토리툴바