STUDY/Algorithm

[프로그래머스_자바스크립트] Lv.2 조이스틱

ez1n 2023. 1. 3. 14:28

 

[Javascript_ 조이스틱]

 


 

<STUDY>

 

📢 문제 📢

 

조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다.
ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA

조이스틱을 각 방향으로 움직이면 아래와 같습니다.

 

▲ - 다음 알파벳
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서)

 

만들고자 하는 이름 name이 매개변수로 주어질 때,

이름에 대해 조이스틱 조작 횟수의 최솟값을 return 하도록 solution 함수를 만드세요.

 

제한 사항

  • name은 알파벳 대문자로만 이루어져 있습니다.
  • name의 길이는 1 이상 20 이하입니다.

 


 

<전체 코드>

 

 

** BBAAAAAAABA와 같이 다시 되돌아 가는 경우의 수를 생각하지 못해 여러 코드를 참고하였습니다. **

 

그 중 한 블로그 입니다 - 자바로 작성되어 있지만 도움이 많이 되었습니다.

 

👉 블로그 바로가기


 

<코드 설명>

 

  • count : 위 / 아래로 움직인 횟수
  • moves : 좌 / 우로 움직인 횟수
  • curNum : i번째 문자의 아스키코드 번호

 

 위 / 아래로 움직이는 경우

 

 

  • 78(N)을 기준으로 78보다 작으면 오른쪽(정방향)으로 조작하고 78보다 크면 왼쪽(역방향)으로 조작한다.
  • N이 A에서 13번째 이기 때문에 이후 알파벳들은 거꾸로 움직여야 조작 횟수를 줄일 수 있다.

 

 

좌 / 우로 움직이는 경우  # 가장 헷갈렸던 부분!

 

 

  • A가 연속되는 부분을 계산하기 위해 while문을 사용하였다.
  • 첫 번째 moves : 거꾸로 돌아가는 경우(왼쪽)와 원래대로 가는 경우(오른쪽) 중에서 더 적은 횟수를 선택
  • 두 번째 moves : 첫 번째에서 거꾸로 가는 것이 더 효율적인 경우를 고려한 것 (ex BBBAAAAAAAAAB)

 


 

2단계 문제를 풀기 시작한지 얼마 되지 않았는데 확실히 1단계보다 한번 더 생각해야 하는 문제들이 많았다.

 

나도 언젠간... 혼자서 이렇게 풀 수 있는 날이 오겠지...?ㅠㅠ

 


 

🔆프로그래머스 Lv2. 조이스틱🔆

 

👉ez1n github 구경하기👈

 

 

ez1n - Overview

Front-End Developer. ez1n has 15 repositories available. Follow their code on GitHub.

github.com