티스토리 뷰
function solution(name) {
// 1
let arr = [...name.matchAll(/[^A]/g)].map(x=>x.index);
const dis0 = i => Math.min(i, name.length-i); //0과의 거리
const dis = (a,b) => { //a부터 b까지 돌기
if(a==b) return dis0(a);
else if(a < b) return Math.min(dis0(a),dis0(b))+b-a;
else return Math.min(dis0(a), dis0(b))+name.length+b-a;
}
let horiz = 0;
if(arr.length==0) return 0;
else if(arr.length==1){
horiz=dis0(arr[0]);
}
else{
horiz = arr.reduce((h,x,i,arr)=>{
if(i===arr.length-1){ //마지막 요소
return Math.min(h, dis(arr[0], x));
}else{
return Math.min(h, dis(arr[i+1], x));
}
},name.length)
};
// 2
let vert = name.split('').reduce((a,x)=>{
const ascii = x.charCodeAt(0);
return a+=Math.min(ascii-65, 91-ascii);
},0);
return horiz+vert;
}
1. horiz : <> 움직이는 횟수
1) dis0 : 0으로 부터 최소한 움직여서 가는 횟수
2) dis (a,b) : 초기에 0에 있다고 가정하고 a부터 b까지 도는 최소 횟수
'A'가 아닌 인덱스 찾아서 i, i+1 사이엔 'A'만 있는 거니까 둘을 끝단으로 해서 나머지 부분 돌기
한 것들중 최솟값 = horiz
2. vert : ↕ 움직이는 횟수
'코딩테스트' 카테고리의 다른 글
[카카오 2019 blind] 후보키 (0) | 2021.04.16 |
---|---|
[카카오 2020 인턴십] 수식 최대화 (0) | 2021.04.15 |
[프로그래머스] 멀쩡한 사각형 (0) | 2021.04.09 |
[BFS] 백준 2206 벽부수고 이동하기 (0) | 2021.01.13 |
댓글
공지사항
최근에 올라온 글