-
[Programmers] 조이스틱(JS)Algorithm 2023. 3. 31. 08:48
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42860
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 풀이
String.charCodeAt() 이용 문자열을 아스키코드로 변환한다.
왼쪽에서부터 오른쪽으로 이동하면서 A와 비교해서 오름차순이 이득인지 내림차순이 이득인지 판단하여 더 이득인쪽을 더한다.
0부터 length-1까지 시작한 index를 기준으로 연속된 A를 파악해
- 처음부터 오른쪽으로 쭉 가는게 이득인지
- 오른쪽으로 갔다가 멈춰서 반대편으로 돌아서 연속된 A가 끝나는 지점까지 돌아가는게 이득인지
- 처음부터 왼쪽으로 갔다가 연속된 A가 끝나는 지점에서 다시 돌아서 오른쪽으로 가서 index에서 멈추는게 이득인지 비교한다.
3. 결과
4. 코드
function solution(name) { let answer = 0; let minCursorMoveCnt = name.length - 1; for(let i=0; i<name.length; i++){ answer += Math.min(name.charAt(i).charCodeAt()-65, 91-name.charAt(i).charCodeAt()); let lastAIndex = i+1; while(lastAIndex<name.length && name.charAt(lastAIndex)==='A'){ lastAIndex++; } minCursorMoveCnt = Math.min(minCursorMoveCnt, i*2 + name.length - lastAIndex, i + (name.length - lastAIndex)*2); } return answer + minCursorMoveCnt; }
5. 어려웠던 점
A가 연속하지 않고 끊겼을 때 처리를 어떻게 해주어야 되나에 대한 고민이 길었는데 길이가 20밖에 안되서 걍 모든 지점에서 while문 돌려서 다 체크해주면 되는거라… 헛고생 좀 했음
'Algorithm' 카테고리의 다른 글
[Programmers] 멀쩡한 사각형 (0) 2023.03.31