프로그래머스/LEVEL 2

조이스틱

GenieLove! 2021. 4. 14. 22:14
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
반응형

'프로그래머스 > LEVEL 2' 카테고리의 다른 글

H-Index  (0) 2021.04.17
전화번호 목록  (0) 2021.04.17
큰 수 만들기  (0) 2021.04.14
더 맵게  (0) 2021.04.11
괄호 변환  (0) 2021.04.11