木の棒
13204 ワード
🔒 質問する
😅 ミス
Aが出てくる回数にかかわらず、一方向にチェックすればいいと思います.
「BBAAAAAC」の場合、ステアリング(左->右または左<-右)の移動回数がより短い.
💡 構想
CASEで分けましょう
[CASE 1]Aが存在しないか1つ
一つの方向に移動すればいいです.(名前の長さ-1)
※ただし、2番目の位置または最後の位置にAが現れると、1回の移動がより節約されます.
2位A->左、最後のA->右
[CASE 2]Aが連続して現れる場合
(韓国側ハンドルボックス)、(左->右)、(左<-右)方向転換ハンドルボックスの3つのうち最小値をとる.方向転換起点は連続するAシーケンスである
🔑プール(Kotlin)
class Solution {
fun solution(name: String): Int {
// Up, Down 기준은 반올림 기준 알파뱃 14번째 'N'
// 'A' -> 'N' == 13, 'N' <- 'A' == 13 (왼, 오른방향 모두 13회)
val getUpDownCount : (Char) -> (Int) = { nameAlphabet: Char ->
if (nameAlphabet <= 'N') nameAlphabet - 'A'
else 13 - ((nameAlphabet - 'A') % 13)
}
if (!name.contains("AA")){
// 2번째 자리 || 마지막자리 A
return if (name.last() == 'A' || name[1]?.let{it == 'A'}) name.fold(0){ sum, alphabet -> sum + getUpDownCount(alphabet)} + name.length - 1 - 1 // 마지막 자리 이동 X || 좌방향 검사로 해결
// 아니면 길이 - 1 (One way move)
else name.fold(0){ sum, alphabet -> sum + getUpDownCount(alphabet)} + name.length - 1 // -1 : 첫자리는 이동 X
} else {
// considering shift of direction (좌->우, 좌<-우)
// 방향전환의 기점은 가장 긴 A 연속 지점 이전, 이후
val numberOfA = ArrayList<Int>()
val startIndex = name.indexOf("AA")
var index = startIndex // 첫 AA 시퀀스 등장 index 로 초기화
var count: Int = 0
// A sequence keep in ArrayList
while (index < name.length) {
if(name[index] != 'A') {
index++
continue
} else {
while(name[index++] == 'A') count++
numberOfA.add(count)
count = 0
}
}
val sequenceA = "A".repeat(Collections.max(numberOfA)) // 가장 긴 A 시퀀스를 얻어냄.
val shiftRightToLeft = (name.substringBefore(sequenceA).length - 1) * 2 + name.substringAfterLast(sequenceA).length
val shiftLeftToRight = name.substringBefore(sequenceA).length + (name.substringAfterLast(sequenceA).length * 2 - 1)
/* answer 1 : one-way solution with reaching 'A'(case2) */
val answer1 = name.fold(0){sum, alphabet -> sum + getUpDownCount(alphabet)} + name.length - 1
// answer 2 : MIN_VALUE of shift direction (좌->우 or 좌<-우)
var answer2 = Integer.min(shiftRightToLeft, shiftLeftToRight)
for (alphabet in name) answer2 += getUpDownCount(alphabet)
return Integer.min(answer1, answer2)
}
}
}
Reference
この問題について(木の棒), 我々は、より多くの情報をここで見つけました https://velog.io/@milkcoke/Programmers-조이스틱テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol