오늘은 여기까지
[프로그래머스] 조이스틱 - Java 자바 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42860
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
개념: 그리디
1. 조이스틱 상하 (알파벳 변경)
- A에서 char로 변경하는게 빠른지, Z에서 char로 변경하는게 빠른지 구한다. char는 현재 포인터로 가르키고 있는 알파벳.
- `Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1)`
2. 조이스틱 좌우 (알파벳 간 이동)
- 처음 시작에서 i번째 알파벳까지 이동하다가, i+1번째부터 A가 나오면, 뒤로 이동하는 경우
- `Math.min(move, i * 2 + length - next)`
- 처음 시작부터 뒤로 이동하다가, A가 나오면 다시 앞으로 이동하는 경우
- `Math.min(move, (length - next) * 2 + i)`
전체코드
class Solution {
public int solution(String name) {
int answer = 0;
int length = name.length();
int move = length - 1;
for (int i = 0; i < length; i++) {
char c = name.charAt(i);
answer += Math.min(c - 'A', 'Z' - c + 1);
int next = i + 1;
while (next < length && name.charAt(next) == 'A') {
next++;
}
move = Math.min(move, i * 2 + length - next); // 처음에서 i번째까지 이동하고, 뒤로 이동하는 경우
move = Math.min(move, (length - next) * 2 + i); // 처음부터 뒤로 이동하고, 다시 앞으로 오는 경우
}
return answer + move;
}
}
'Problem Solving' 카테고리의 다른 글
[swea/20019] 회문의 회문 - Java 자바 (1) | 2024.11.17 |
---|---|
[swea/4012] 요리사 - Java 자바 (1) | 2024.11.16 |
[프로그래머스] 체육복 - Java 자바 (2) | 2024.11.14 |
[백준/2579] 계단 오르기 - Java 자바 (2) | 2024.11.13 |
[백준/9095] 1, 2, 3 더하기 - Java 자바 (0) | 2024.11.12 |