프로그래머스 문제 : https://programmers.co.kr/learn/courses/30/lessons/67256
안녕하세요 ◠‿◠ 고고입니다.
오늘은 프로그래머스에 있는 2020 카카오 인턴십 키패드 누르기를 풀어보았습니다.
1에서 4까지의 거리는 1입니다. 4 / 3 = 1 입니다.
1에서 5까지의 거리는 2입니다. 4 / 3 + 4 % 3 = 1 + 1 = 2 입니다.
3으로 나눈 몫과 나머지를 더하면 거리를 구할 수 있습니다.
import Foundation
func solution(_ numbers:[Int], _ hand:String) -> String {
var result = ""
var left = 10
var right = 12
func appendLeft(number: Int) {
left = number
result.append("L")
}
func appendRight(number: Int) {
right = number
result.append("R")
}
for number in numbers {
let number = number == 0 ? 11 : number // 0이면 11로 대체.
if number == 1 || number == 4 || number == 7 { // "L"
appendLeft(number: number)
} else if number == 3 || number == 6 || number == 9 { // "R"
appendRight(number: number)
} else { // 중간 숫자들
// a부터 b까지의 거리 = abs(a - b) / 3 + abs(a - b) % 3
let Ldiff = abs(left - number) / 3 + abs(left - number) % 3
let Rdiff = abs(right - number) / 3 + abs(right - number) % 3
if Ldiff < Rdiff { // 왼손이 더 가까움
appendLeft(number: number)
} else if Ldiff > Rdiff {
appendRight(number: number)
} else { // 똑같다면 왼손/오른손잡이
if hand == "left" {
appendLeft(number: number)
} else {
appendRight(number: number)
}
}
}
}
return result
}
print(solution([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], "right")) // "LRLLLRLLRRL"
print(solution([7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2], "left")) // "LRLLRRLLLRR"
print(solution([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], "right")) // "LLRLLRLLRL"
'알고리즘' 카테고리의 다른 글
[Swift] find Two Missing Numbers (0) | 2022.01.11 |
---|---|
[Swift] 프로그래머스 - 하노이의 탑 (0) | 2022.01.10 |
[Swift] 2차원 배열 90도 회전 코드 (0) | 2021.11.18 |
[Swift] 프로그래머스 – 내적 (0) | 2021.11.04 |
[Python] 프로그래머스 - 키패드 누르기 (0) | 2021.11.03 |
댓글