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 |