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

2021. 5. 5. 16:37·Algorithm/Programmers
#include <string>
#include <vector>

using namespace std;

string solution(vector<int> numbers, string hand) {
    string answer = "";
    vector<pair<int, int>> lists(13);	//키패드 위치
    
    int left = 10;	//*
    int right = 12;	//#
    
    {	//현재 번호의 키패드 위치를 넣는다.
        int counts = 1;
        for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                lists[counts].first = j;
                lists[counts].second = i;
                counts++;
            }
        }
    }
    
    
    for(int i = 0; i < numbers.size(); i++)
    {
    //고정된 키값은 바로 적용
        if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7)
        {
            left = numbers[i];
            answer += "L";
        }
        else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9)
        {
            right = numbers[i];
            answer += "R";
        }
        else
        {	// 0은 11번째칸으로 인식하게
            if(numbers[i] == 0)
                numbers[i] = 11;
            
            //각 위치에서의 거리를 계산한다.
            int leftLen = abs(lists[numbers[i]].first - lists[left].first);
            leftLen += abs(lists[numbers[i]].second - lists[left].second);
            int rightLen = abs(lists[numbers[i]].first - lists[right].first);
            rightLen += abs(lists[numbers[i]].second - lists[right].second);
            
            //어느손잡이인지
            if(leftLen == rightLen)
            {
                if(hand == "right")
                {
                    answer += "R";
                    right = numbers[i];
                }
                else
                {
                    answer += "L";
                    left = numbers[i];
                }
            }
            else	//거리가 작을수록 다음키
            {
                if(leftLen < rightLen)  
                {
                    answer += "L";
                    left = numbers[i];
                }
                else
                {
                    answer += "R";
                    right = numbers[i];
                }
            }
        }
    }
    
    
    return answer;
}

 

풀이

  1. 각 번호에 해당하는 위치를 넣어준다.
  2. 고정 위치는 바로 계산한다.
  3. 가운데는 각 번호에 해당하는 왼, 오른손의 위치와 누를 위치의 거리를 계산한다.
    여기서 계산은 

x로 몇칸, y로 몇칸 차이나는지를 구하여 총 얼마의 거리를 나타내는지를 구하여

비교하면 어떤 손으로 칠지를 구할 수 있다. 거리가 같다면 오른손잡이면 오른손, 왼손잡이면 왼손으로 한다.

 

 

처음에는 각 위치의 연결된 리스트를 만들어서 순회한 만큼을 구하려했다.

하지만 너무 복잡하다고 생각했는데 이런 방법이 생각나서 풀게 되었다.

 

 

문제 링크 : 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

 

저작자표시 (새창열림)

'Algorithm > Programmers' 카테고리의 다른 글

[C++] 프로그래머스 수식최대화 2020카카오인턴십  (0) 2021.05.06
[C++] 프로그래머스 여행경로 DFS/BFS  (0) 2021.05.06
[C++] 프로그래머스 더 맵게 힙  (0) 2021.05.04
[C++] 프로그래머스 프린터 스택/큐  (0) 2021.05.04
[C++] 프로그래머스 기능개발 스택/큐  (0) 2021.05.03
'Algorithm/Programmers' 카테고리의 다른 글
  • [C++] 프로그래머스 수식최대화 2020카카오인턴십
  • [C++] 프로그래머스 여행경로 DFS/BFS
  • [C++] 프로그래머스 더 맵게 힙
  • [C++] 프로그래머스 프린터 스택/큐
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Java
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    JPA
    dp
    dfs
    spring
    Java
    c++ 기초 플러스
    오블완
    알고리즘
    JWT
    SpringSecurity
    프로그래머스
    티스토리챌린지
    백준
    위클리 챌린지
  • hELLO· Designed By정상우.v4.10.0
chanheess
[C++] 프로그래머스 키패드누르기 2020 카카오 인턴십

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.