티스토리 뷰
문제 링크
풀이
Level 1답게 비교 구문 이용해서 푸는 문제였다.
정해진 범위기 때문에 미리 map에 담아두고 거리 비교(절대값)로 풀었다.
요약
// Setting
map에 키 패드 위치(row, col) 초기화
왼손 위치 초기화
오른손 위치 초기화
// TODO
반복문(number 배열 크기)
{
1, 4, 7일 때,
왼손 입력 및 위치 갱신
3, 6, 9일 때,
오른손 입력 및 위치 갱신
나머지일 때,
왼손, 오른손 거리 비교(절대값) --- <cmath>의 abs 사용
왼손 가까울 때,
왼손 입력 및 위치 갱신
오른손 가까울 때,
오른손 입력 및 위치 갱신
거리가 같을 때,
왼손잡이일 때,
왼손 입력 및 위치 갱신
오른손잡이일 때,
오른손 입력 및 위치 갱신
}
더보기
#include <string>
#include <vector>
#include <map>
#include <cmath>
using namespace std;
// *, # 시작
// 거리 1씩
// 1, 4, 7은 무조건 왼손 / 3, 6, 9는 무조건 오른손
// 중앙은 가까운 손
// 거리 같으면 주손(hand)으로 판별
string solution(vector<int> numbers, string hand) {
string answer = ""; // ex) "LRLRLRLR"
// Setting(NumberPad)
map<int, pair<int, int>> pad;
pad[1] = make_pair(1, 1); // 1행 1열
pad[2] = make_pair(1, 2); // 1행 2열
pad[3] = make_pair(1, 3);
pad[4] = make_pair(2, 1);
pad[5] = make_pair(2, 2);
pad[6] = make_pair(2, 3);
pad[7] = make_pair(3, 1);
pad[8] = make_pair(3, 2);
pad[9] = make_pair(3, 3);
pad[0] = make_pair(4, 2);
pair<int, int> leftHand = make_pair(4, 1); // 4행 1열, '*' 시작
pair<int, int> rightHand = make_pair(4, 3); // 4행 3열, '#' 시작
// TODO
for(int num: numbers){
pair<int, int> pos(pad.find(num)->second);
if(num == 1 || num == 4 || num == 7){
// only 왼손
answer+='L';
leftHand.first = pos.first;
leftHand.second = pos.second;
}
else if(num == 3 || num == 6 || num == 9){
// only 오른손
answer+='R';
rightHand.first = pos.first;
rightHand.second = pos.second;
}
else{
// 비교
int leftSum = abs(leftHand.first - pos.first) + abs(leftHand.second - pos.second);
int rightSum = abs(rightHand.first - pos.first) + abs(rightHand.second - pos.second);
if(leftSum < rightSum){
answer += 'L'; // Left가 더 가깝다
leftHand.first = pos.first;
leftHand.second = pos.second;
}
else if(leftSum > rightSum){
answer += 'R'; // Right가 더 가깝다
rightHand.first = pos.first;
rightHand.second = pos.second;
}
else if(leftSum == rightSum){
if(hand == "left"){
answer += 'L';
leftHand.first = pos.first;
leftHand.second = pos.second;
}
else if(hand == "right"){
answer += 'R';
rightHand.first = pos.first;
rightHand.second = pos.second;
}
}
}
}
return answer;
}
728x90
반응형
'Programmers Solutions > previous' 카테고리의 다른 글
[프로그래머스, C++] 기둥과 보 설치(2020 카카오 블라인드 채용) (0) | 2020.08.30 |
---|---|
[프로그래머스, C++]자물쇠와 열쇠(2020 카카오 블라인드 채용) (0) | 2020.08.30 |
[1차] 추석 트래픽(2018 카카오 블라인드 채용) (0) | 2020.08.22 |
[3차] n진수 게임(2018 카카오 블라인드 채용) (0) | 2020.08.17 |
[3차] 파일명 정렬(2018 카카오 블라인드 채용) (0) | 2020.08.16 |
댓글