-
[프로그래머스/Level 1] 키패드 누르기 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 26. 21:41
programmers.co.kr/learn/courses/30/lessons/67256
풀이
문제 자체는 어렵지 않다고 생각하는데, 좌표를 pair형으로 저장할 생각을 하지 못해서 구현하는 과정에서 복잡해지는 바람에 잦은 실수가 많았다. 결국 구글에서 약간의 힌트를 얻어서 해결했다.
전체 코드
#include <string> #include <vector> using namespace std; string solution(vector<int> numbers, string hand) { string answer = ""; // 벡터에 미리 폰의 좌표를 저장함 vector<pair<int, int> > v(13); v[0] = make_pair(3, 1); // pair형 벡터의 원소를 추가하는 다른 방법 int i = 0, j = -1; for(int k = 1; k <= 12; k++) { j++; if(j == 3) { i++; j = 0; } if(k == 11) continue; v[k] = make_pair(i, j); } // 현재 위치 * -> 10, # -> 12 pair<int, int> leftPos = v[10]; pair<int, int> rightPos = v[12]; for(auto n : numbers) { // 1, 4, 7번을 누를 때 if(n == 1 || n == 4 || n == 7) { leftPos = v[n]; answer += "L"; // 3, 6, 9번을 누를 때 } else if(n == 3 || n == 6 || n == 9) { rightPos = v[n]; answer += "R"; // 2, 4, 6, 8, 0번을 누를 때 } else { // 거리 구하기 int leftDis = abs(leftPos.first - v[n].first) + abs(leftPos.second - v[n].second); int rightDis = abs(rightPos.first - v[n].first) + abs(rightPos.second - v[n].second); // 왼쪽이 가까운 경우 if(leftDis < rightDis) { leftPos = v[n]; answer += "L"; // 오른쪽이 가까운 경우 } else if(leftDis > rightDis) { rightPos = v[n]; answer += "R"; // 양쪽 거리가 같을 때 } else { if(hand == "left") { // 왼손잡이 leftPos = v[n]; answer += "L"; } else { // 오른손잡이 rightPos = v[n]; answer += "R"; } } } } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 1] 행렬의 덧셈 (C++) (0) 2020.10.27 [프로그래머스/Level 1] 최대 공약수와 최소 공배수 (C++) (0) 2020.10.27 [프로그래머스/Level 1] 시저 암호 (C++) (0) 2020.10.26 [프로그래머스/Level 1] 소수 찾기 (C++) (0) 2020.10.26 [프로그래머스/Level 1] 문자열 내 마음대로 정렬하기 (C++) (0) 2020.10.24