木の棒
1741 ワード
🔗 質問リンク
アルゴリズム
実は私(i*2)+len-next部分は長い間考えていました...!ううう
私はコミュニティの多くの人がこの問題がグリディかどうかを論争しているのを見た.
実は知りません.ウハハ...アルゴリズム初心者なので…努力する
木の棒
インプリメンテーションコード
import java.util.*;
class Solution {
public int solution(String name) {
int answer = 0;
int len = name.length();
int min_move = len-1; //조이스틱을 움직여서 가질 수 있는 가장 큰 이동값 = 차례로 움직여서 len까지 가는 경우
for(int i=0;i<len;i++){
//알파벳 조작 값 계산
answer += Math.min(name.charAt(i)-'A','Z'-name.charAt(i)+1);
//최소 이동 값 계산
int next = i+1;
while(next<len&&name.charAt(next)=='A') next++;
min_move = Math.min(min_move,i+len-next+i);
}
answer += min_move;
return answer;
}
}
左→右にまっすぐ行く場合ではなく、帰りの基準をどうやって作るか分からないので、解決できなかった問題です.他のブログを見て参考にして、やっと理解できましたㅠmin move:ゲームレバーを移動したときに得られる最大移動値。 左から右に1回移動すると最大になるのでlen-1。 ドア回りの場合は、アルファベット操作値と最小移動値を計算する必要があります。 1.アルファベット操作値(上下移動) (アルファベット-A)(down)と(Z-アルファベット+1)(up)の最小値を答えに追加します。 2.最小移動値(左右移動) 現在の文字の次の文字がAの場合、next++ 最終nextは、A文字の位置ではなくAを指す。 min move値と(i*2)+len-next値の最小値を答えに加算します。
(i*2)+len-next ?? 左->右に移動するのではなく、位置を左に移動します(逆)。 len-next:全長で、現在直後のAが余剰文字数を超えた i:右から右への移動回数 i*2+len-next:現在に戻り、残りの移動回数に戻る
実は私(i*2)+len-next部分は長い間考えていました...!ううう
私はコミュニティの多くの人がこの問題がグリディかどうかを論争しているのを見た.
実は知りません.ウハハ...アルゴリズム初心者なので…努力する
リファレンス
木の棒
Reference
この問題について(木の棒), 我々は、より多くの情報をここで見つけました https://velog.io/@yonii/조이스틱テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol