728x90
반응형
Java
import java.lang.*;
import java.util.*;
class Solution {
public int solution(String name) {
int answer = 0;
//아스키코드 65 ~ 90
int index = 0;
boolean[] visited = new boolean[name.length()];//변경완료 저장
for(int i = 0; i < visited.length; i++) {
if (name.charAt(i) == 'A')
visited[i] = true;
}
while (true) {
int front = name.charAt(index) - 65;
int end = 91 - name.charAt(index);
if(front < end) answer += front;
else answer += end;
visited[index] = true;
int frontIndex = (index + 1) % name.length();
int endIndex = index - 1 < 0 ? name.length() - 1 : index - 1;
int count = 1;//좌우 움직임 카운트
while(true){
if(visited[frontIndex] == false){
answer += count;
index = frontIndex;
break;
}
if(visited[endIndex] == false){
answer += count;
index = endIndex;
break;
}
if(visited[frontIndex] == true && visited[endIndex] == true) {
frontIndex = (frontIndex + 1) % name.length();
endIndex = endIndex - 1 < 0 ? name.length() - 1 : endIndex - 1;
}
count++;
if(count == name.length()){//한바퀴 완료했으면 끝 -> 모두 변경됨
break;
}
}
if(count == name.length()) break;//모두 변경됨
}
return answer;
}
}
Python
def solution(name):
answer = 0
index = 0
visited = list()
for i in name:
if i == 'A':
visited.append(True)
else:
visited.append(False)
while(True):
front = ord(name[index]) - 65
end = 91 - ord(name[index])
if front < end:
answer += front
else:
answer += end
visited[index] = True
frontIndex = (index + 1)% len(name)
endIndex = len(name) - 1 if index - 1 < 0 else index - 1
count = 1
while(True):
if visited[frontIndex] == False:
answer += count
index = frontIndex
break
if visited[endIndex] == False:
answer += count
index = endIndex
break
if(visited[frontIndex] == True and visited[endIndex] == True):
frontIndex = (frontIndex + 1) % len(name)
endIndex = len(name) - 1 if endIndex - 1 < 0 else endIndex - 1
count += 1
if count == len(name):
break
if count == len(name):
break
return answer
728x90
반응형