반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42860
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
Review
처음에는 list에 넣어서 풀었는데 좌우 이동을 계산하는 데 불편함을 느껴서 아래와 같은 코드로 수정했다. 아래-위 방식은 풀기 쉬웠는데, 좌-우 방식이 좀 까다로웠다.
우선 크게 분류하면, 아래-위 이동과 좌-우 이동으로 코드를 나누어 계산한 후 더해주는 방식이다. minMoves를 초기화해준 뒤 i를 기준으로 좌로 이동하는 횟수와 우로 이동하는 횟수 중 작은 것을 선택해 답에 더해주면 된다.
가장 하단의 코드는 name이 모두 A로만 구성되어 있는 경우 답이 0이 아닌 name.length() - 1로 출력되는 에러를 해결한 것이다. 하드 코딩이 들어간 느낌이어서 이것보다 더 좋은 방법이 있을 수도 있겠지만 우선은 이게 최선인 걸로..
Code
class Solution {
public int solution(String name) {
int answer = 0;
// 아래-위 이동
for (int i = 0; i < name.length(); i++) {
answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
}
// 좌-우 이동
int minMoves = name.length() - 1;
for (int i = 0; i < name.length(); i++) {
if (name.charAt(i) != 'A') {
int nextNotA = i + 1;
while (nextNotA < name.length() && name.charAt(nextNotA) == 'A') {
nextNotA++;
}
minMoves = Math.min(minMoves, Math.min(i, name.length() - nextNotA) + i + name.length() - nextNotA);
}
}
answer += minMoves;
// test case 17 오류로 인해 추가한 코드
// AAAAAA인 경우 0이 아닌 5로 출력되는 에러 해결
int count = 0;
for (int i = 0; i < name.length(); i++) {
if (name.charAt(i) == 'A') {
count++;
}
}
if (count == name.length()) {
answer = 0;
}
return answer;
}
}
반응형
'Dev > Programmers' 카테고리의 다른 글
| [프로그래머스] 소수 찾기 (Java) (0) | 2025.01.14 |
|---|---|
| [프로그래머스] 모음사전 (Java) (0) | 2025.01.08 |
| [프로그래머스] 모의고사 (Java) (0) | 2024.12.24 |
| [프로그래머스] 최소직사각형 (Java) (0) | 2024.12.23 |
| [프로그래머스] 베스트앨범 (Java) (0) | 2024.12.23 |