프로그래머스 - 키 패드 누르기

jihunnit·2022년 9월 16일
0

코테

목록 보기
17/20

키 패드 누르기

이 문제도 간단한 구현 문제이다.
케이스를 잘 나누면 된다.

주의해야 할 점은 맨 처음 왼손과 오른손의 시작점인 *와 #를
어떻게 처리하냐 일 것이다.

이것도 각자의 스타일이 있겠지만
나는 맨 마지막 행의 *,0,#을 그냥
10, 11, 12라고 생각하고 풀기로 했다.

그게 훨씬 거리를 구하기 쉬운것 같아서
물론 더 쉽게 푸신 분들도 많을 것 같지만
일단 구현 문제는 구현을 성공하는게 시작이니까!!

코드는 다음과 같다

#include <string>
#include <vector>

using namespace std;

string solution(vector<int> numbers, string hand) {
    string answer = "";
    int left = 10;
    int right = 12;
    for(int i=0;i<numbers.size();i++){
        int k = numbers[i];
        if(k==0) k=11;
        if(k==1||k==4||k==7){
            answer.push_back('L');
            left=numbers[i];
        }
        else if(k==3||k==6||k==9){
            answer.push_back('R');
            right=numbers[i];
        }
        else{
            int distLeft = 0;
            if(k>left){
                distLeft=(k-left)%3+(k-left)/3;
            }else{
                distLeft=(left-k)%3+(left-k)/3;
            }
            int distRight=0;
            if(k>right){
                distRight=(k-right)/3+(k-right)%3;
            }else{
                distRight=(right-k)/3+(right-k)%3;
            }
            if(distLeft>distRight){
                right=k;
                answer.push_back('R');
            }else if(distLeft<distRight){
                left=k;
                answer.push_back('L');
            }else{
                if(hand=="left"){
                    left=k;
                    answer.push_back('L');
                }else{
                    right=k;
                    answer.push_back('R');
                }
            }
        }
    }
    return answer;
}
profile
인간은 노력하는 한 방황한다

0개의 댓글