728x90
class Solution {
public int solution(String name) {
int joyMoveForAlp = 0;
int numOfNotA = 0;
for (int i = 0; i < name.length(); i++) {
// 14번째 알파벳부터는 반대로 가야함.
if (13 < name.charAt(i)-64) {
joyMoveForAlp += 26 - (name.charAt(i) - 'A');
} else {
joyMoveForAlp += name.charAt(i) - 'A';
}
if (name.charAt(i) != 'A') {
numOfNotA++;
}
}
if (numOfNotA == name.length()) return joyMoveForAlp+=name.length()-1;
// 앞으로 가는 방법.
int numOfForwardMove = joyMoveForAlp;
int temp = numOfNotA;
for (int i = 0; i < name.length(); i++) {
numOfForwardMove++;
if (name.charAt(i) != 'A') {
temp--;
}
if (temp==0) {
break;
}
}
numOfForwardMove--; //0은 움직인 걸로 안쳐서 --해줘야함.
// 뒤로 가는 방법.
int numOfBackwardMove = joyMoveForAlp;
temp = numOfNotA;
if (name.charAt(0) != 'A') temp--;
for (int i = name.length() - 1; i > 0; i--) {
numOfBackwardMove++;
if (name.charAt(i) != 'A') {
temp--;
}
if (temp == 0) {
break;
}
}
return Math.min(numOfForwardMove, numOfBackwardMove);
}
}
테스트케이스 마지막에서 통과를 못한다.
도저히 모르겠어서 검색해봤는데, 앞에서 뒤로 가는 경우, 뒤에서 앞으로 가는 경우가 있는데 나는 이 두가지만 처리해줬다.
근데 마지막 케이스로 앞에서 뒤로 가다가 다시 뒤에서 앞으로 가는 경우. 역주행하는 경우가 있었다.
솔직히 중간중간 풀면서 무지성으로 풀어서 어차피 맘에 안드는 코드긴 했는데, 결과적으로 풀지도 못하고, 예외 케이스도 생각 못한 망한 케이스가 됐다.
다음에 다시 풀어봐야겠다. 애초에 그리드 카테고리 문제를 전혀 안풀어서 그런지, 너무 약한 느낌이 든다. 그리드도 가끔 몇개씩 풀어봐야겠다.
728x90
반응형
'알고리즘 문제 풀이 > 다시 봐야할 것들' 카테고리의 다른 글
백준 - 테트로미노 (0) | 2022.01.26 |
---|---|
백준 - 분산처리 (통과 못하면 처음부터 꼼꼼히 보자) (2) | 2021.12.25 |
백준 - 사탕 게임 (0) | 2021.12.22 |
(백트래킹) 78. Subsets (0) | 2021.06.17 |
Minimum Number of Operations to Move All Balls to Each Box (0) | 2021.04.14 |