문제
숫자 버튼을 어느쪽 손가락으로 누르는지 배열에 담아 반환하는 문제
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
* | 0 | # |
조건
- 시작할 때 왼손은 *에 오른손은 #에 위치
- 1, 4, 7은 왼손으로 3, 6, 9 는 오른손으로 가운데 열은 손가락이 더 가까운 쪽으로 누른다.
- 만일 가운데 열 중 양 손의 거리가 같다면, 왼손잡이는 왼손으로 오른손잡이는 오른손으로 누른다.
풀이 과정
1. 키패드를 2차원 배열로 초기화
2. 각 번호의 좌표를 Map에 담는다.
3. 현재 양 손의 위치를 담는 변수 선언
4. 조건에 맞춰 누른 손가락을 담아주면 된다.
코드
import kotlin.math.abs
class Solution {
fun solution(numbers: IntArray, hand: String): String {
var answer = StringBuilder()
val keyPad = arrayListOf(arrayListOf(1,2,3),
arrayListOf(4,5,6),
arrayListOf(7,8,9),
arrayListOf(-1,0,-2))
val hashMapKeyPad : HashMap<Int, Array<Int>> = hashMapOf(
Pair(1, arrayOf(0,0)), Pair(2, arrayOf(0,1)), Pair(3, arrayOf(0,2)),
Pair(4, arrayOf(1,0)), Pair(5, arrayOf(1,1)), Pair(6, arrayOf(1,2)),
Pair(7, arrayOf(2,0)), Pair(8, arrayOf(2,1)), Pair(9, arrayOf(2,2)),
Pair(0, arrayOf(3,1))
)
val leftHand : ArrayList<Int> = arrayListOf(3,0)
val rightHand : ArrayList<Int> = arrayListOf(3,2)
for(i in numbers.indices){
when(numbers[i]){
1,4,7 -> { val it = numbers[i]
//Left
val (x,y) = hashMapKeyPad.get(it)!!
leftHand.run{
clear()
add(x)
add(y)
}
answer.append("L")
}
3,6,9 -> { val it = numbers[i]
//Right
val (x,y) = hashMapKeyPad.get(it)!!
rightHand.run{
clear()
add(x)
add(y)
}
answer.append("R")
}
//가운데 열
else -> { val it = numbers[i]
val (x,y) = hashMapKeyPad.get(it)!!
val (rhx, rhy) = rightHand
val (lhx, lhy) = leftHand
if(abs(rhx-x)+abs(rhy-y) > abs(lhx-x)+abs(lhy-y)){
// 왼손이 더 가까움
leftHand.run{
clear()
add(x)
add(y)
}
answer.append("L")
}
else if(abs(rhx-x)+abs(rhy-y) < abs(lhx-x)+abs(lhy-y)){
//오른손이 더 가까움
rightHand.run{
clear()
add(x)
add(y)
}
answer.append("R")
}
else{
//동일 거리
if(hand == "right") {
rightHand.run{
clear()
add(x)
add(y)
}
answer.append("R")
}
else {
leftHand.run{
clear()
add(x)
add(y)
}
answer.append("L")
}
}
}
}
}
return answer.toString()
}
}
'코딩 테스트 > Lv.1' 카테고리의 다른 글
[프로그래머스] 둘만의 암호 with Kotlin (0) | 2023.11.06 |
---|---|
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2023.11.06 |
[프로그래머스] 햄버거 만들기 with Kotlin (0) | 2023.11.06 |
[프로그래머스] 바탕화면 정리 with Kotlin (0) | 2023.11.06 |
[프로그래머스] 신고 결과 받기 with Python (0) | 2023.11.04 |