알고리즘/프로그래머스

[프로그래머스] 키패드 누르기 C++ (Lv.1)

lheunoia 2023. 5. 1. 23:14

 

 

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이번 문제는 2020 카카오 인턴십 문제였습니다.

 

 

 

 

 

📝 문제 풀이

⭐️ * ➡️ 10, 0 ➡️ 11, # ➡️ 12로 생각하기

 

1. 맨 처음 왼손 엄지손가락 위치를 10, 오른손 엄지손가락 위치를 12로 초기화

2. 누를 번호 1, 4, 7 ➡️ 왼손 엄지손가락으로 입력

3. 누를 번호 3, 6, 9 ➡️ 오른손 엄지손가락으로 입력

4. 누를 번호 2, 5, 8, 0 ➡️ 왼손 엄지손가락과의 거리와 오른손 엄지손가락과의 거리 비교

     🤹🏻‍♀️ 거리가 다르다면 누를 번호와 더 가까운 엄지손가락을 사용

         💡 거리 계산: | (엄지손가락 위치 - 누를 번호) / 3 | + | (엄지손가락 위치 - 누를 번호) % 3 |

     🙌🏻 거리가 같다면 hand에 따라 키패드 누르기

 

 

 

 

 

👩🏻‍💻 C++ 코드

#include <string>
#include <vector>

using namespace std;

string solution(vector<int> numbers, string hand) {
    string answer = "";
    int lefthand = 10;
    int righthand = 12;
    
    for (int number: numbers) {
        if (number == 1 || number == 4 || number == 7) {
            answer += 'L';
            lefthand = number;
        }
        
        else if (number == 3 || number == 6 || number == 9) {
            answer += 'R';
            righthand = number;
        }
        
        else {
            if (number == 0) number = 11;
            
            int leftDistance = abs((lefthand - number) / 3) + abs((lefthand - number) % 3);
            int rightDistance = abs((righthand - number) / 3) + abs((righthand - number) % 3);
            
            if (leftDistance < rightDistance) {
                answer += 'L';
                lefthand = number;
            } else if (leftDistance == rightDistance) {
                if (hand == "left") {
                    answer += 'L';
                    lefthand = number;
                } else {
                    answer += 'R';
                    righthand = number;
                }
            } else {
                answer += 'R';
                righthand = number;
            }
        }
    }
    
    return answer;
}

 

프로그래머스 - 결과 화면

 

 

 

 

반응형