[프로그래머스] 키패드 누르기 (Kotlin)
- ETC../문제 풀이
- 2021. 2. 15.
728x90
문제
이해
엄지손가락만으로 터치
왼손 * 시작
오른손 # 시작
상하좌우 이동
2580 의경우에는 현재 왼손, 오른손 위치중 가까운 손으로 터치
접근
- 숫자의 좌표화(거리 비교) , but 거리는 안구해도됨
- Pair의 함수 추가
- if 분기 나누고 거리 비교 하기
풀이
import kotlin.math.abs
fun main() {
val data = intArrayOf(1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5)
val data1 = "right"
println(Solution().solution(data, data1))
}
class Solution {
fun solution(numbers: IntArray, hand: String): String {
var answer = ""
val map = mutableMapOf(
1 to Pair(0, 3),
2 to Pair(1, 3),
3 to Pair(2, 3),
4 to Pair(0, 2),
5 to Pair(1, 2),
6 to Pair(2, 2),
7 to Pair(0, 1),
8 to Pair(1, 1),
9 to Pair(2, 1),
0 to Pair(1, 0),
"*" to Pair(0, 0),
"#" to Pair(2, 0)
)
var currentL: Any = "*"
var currentR: Any = "#"
fun Pair<Int, Int>.distance(pair: Pair<Int, Int>): Int =
abs(this.first - pair.first) + abs(this.second - pair.second)
for (number in numbers) {
if (setOf(1, 4, 7).contains(number)) {
answer += "L"
currentL = number
} else if (setOf(3, 6, 9).contains(number)) {
answer += "R"
currentR = number
} else {
val position = map[number]!!
var a: Int = position.let { map[currentL]!!.distance(it) }
var b: Int = position.let { map[currentR]!!.distance(it) }
if (a > b) {
answer += "R"
currentR = number
} else if (a < b) {
answer += "L"
currentL = number
} else {
if (hand.equals("right")) {
answer += "R"
currentR = number
} else {
answer += "L"
currentL = number
}
}
}
}
return answer
}
}
728x90
'ETC.. > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 콜라츠 추측 (Kotlin) (0) | 2021.02.16 |
---|---|
[프로그래머스] 최대공약수와 최소공배수 (Kotlin) (0) | 2021.02.16 |
[프로그래머스] 제일 작은 수 제거하기 (Kotlin) (0) | 2021.02.12 |
[프로그래머스] 정수 제곱근 판별 (Kotlin) (0) | 2021.02.12 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 (Kotlin) (0) | 2021.02.11 |