JOY STIC(Lv.2)
質問リンク
アスキーコードで変更して比較する部分は何もありませんが...
肝心な問題は、レバーの左から右への移動を最小限に抑える方法を見つけることです.
最初はJOYSTICが前を向いて後ろを向いていることだけを考えていたのですが、解けていないことに気づきました
反対の場合もコードでコードを記述するため、コード量がかなり多くなります.
徹底的に探索しただけであれば、コードはもっと簡潔になるはずです.
に答える
import Foundation
func solution(_ name:String) -> Int {
var result = 0
var nameArr = name.map { Int(UnicodeScalar(String($0))!.value) - 65 } // A = 0, B = 1 이런식으로 값으로 변환
// 전부 A일 경우의 예외처리
var isAllA = true
for name in nameArr {
if name != 0 {
isAllA = false
break
}
}
if isAllA {
return 0
}
// 조이스틱 왼/오른쪽의 경우에 소요되는 값만 계산
var greedyVal = nameArr.count - 1 // 어느 식으로 돌아야 최선일지 찾는다.
// 먼저 뒤로갔다 앞으로 갈 경우 체크
for index in stride(from: nameArr.count - 1, to: 1, by: -1) {
if nameArr[index] == 0 // 지금 순번이 A인 경우이거나
|| nameArr[index - 1] != 0 { // 다음게 A가 아닐경우 체크할 필요 없다.
continue
}
// 거꾸로 갔을 때 몇번째까지 가야하는지 체크
var moveMore = 0
for i in 1..<index {
if nameArr[i] == 0 {
continue
} else {
moveMore = i
}
}
var backMove = ((nameArr.count - index) * 2)
if moveMore == 0 { // 앞으로 다시갈 일이 없다면
backMove = nameArr.count - index
}
let moveVal = backMove + moveMore
if greedyVal > moveVal {
greedyVal = moveVal
}
}
// 먼저 앞으로 갔다 뒤로 갈 경우 체크
for index in 0..<nameArr.count - 1 {
if nameArr[index] == 0 // 지금 순번이 A인 경우이거나
|| nameArr[index + 1] != 0 { // 다음게 A가 아닐경우 체크할 필요 없다.
continue
}
var moveMore = 0
for i in stride(from: nameArr.count - 1, to: index + 1, by: -1) {
if nameArr[i] == 0 {
continue
} else {
moveMore = nameArr.count - i
}
}
var backMove = index * 2
if moveMore == 0 { // 뒤로 다시갈 일이 없다면
backMove = index
}
let moveVal = backMove + moveMore
if greedyVal > moveVal {
greedyVal = moveVal
}
}
//print(greedyVal)
result = greedyVal
// 조이스틱 위 아래의 경우에 소요되는 값만 계산
for (index, name) in nameArr.enumerated() {
if name > 12 { // 조이스틱 아래쪽으로 이동하는게 빠른 경우
result += 26 - name
} else { // 조이스틱 위쪽으로 이동하는게 빠른 경우
result += name
}
}
return result
}
ポスト
アスキーコードで変更して比較する部分は何もありませんが...
肝心な問題は、レバーの左から右への移動を最小限に抑える方法を見つけることです.
最初はJOYSTICが前を向いて後ろを向いていることだけを考えていたのですが、解けていないことに気づきました
反対の場合もコードでコードを記述するため、コード量がかなり多くなります.
徹底的に探索しただけであれば、コードはもっと簡潔になるはずです.
Reference
この問題について(JOY STIC(Lv.2)), 我々は、より多くの情報をここで見つけました https://velog.io/@haze5959/프로그래머스-조이스틱-Lv.-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol