본문 바로가기
알고리즘 문제풀이/프로그래머스

[프로그래머스 2020 카카오 인턴십] 키패드 누르기

by m2162003 2021. 1. 21.

programmers.co.kr/learn/courses/30/lessons/67256

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

간단한? 구현문제

핸드폰 자판 위치 나타낼때 row표시에서 오류가 났다. 주의하자

#include <string>
#include <vector>
#include <math.h>
#include <iostream>

using namespace std;

string solution(vector<int> numbers, string hand) {
    string answer = "";
    
    int lr=3, lc = 0;
    int rr=3, rc = 2;
    int gr, gc;
    for(int i=0; i<numbers.size(); i++){
        int num = numbers[i];
        if(num%3 == 1){
            answer += "L";
            lr = (num-1)/3;
            lc = (num-1)%3;
        }else if(num>0 && num%3 == 0){
            answer += "R";
            rr = (num-1)/3;
            rc = (num-1)%3;
        }else{
            
            if(num == 0){
                gr = 3, gc=1;
            }else{
                gr = (num-1)/3;
                gc = (num-1)%3;
            }
           
            int ld = abs(lr-gr) + abs(lc-gc);
            int rd = abs(rr-gr) + abs(rc-gc);
           
            if(ld<rd){
                answer += "L";
                lc = gc, lr=gr;
               
            }else if(ld>rd){
                answer += "R";
                rc = gc, rr = gr;
            }else {
                if(hand == "left"){
                    answer += "L";
                    lc = gc, lr=gr;
                }else{
                    answer += "R";
                    rc = gc, rr = gr;
                }
            }
        }
    }
    return answer;
}

댓글