반응형
https://programmers.co.kr/learn/courses/30/lessons/67256
글쓴이의 답
개인적인 풀이 임으로
이것보다 더 좋은 알고리즘은 많음...
이렇게도 풀이하는구나.. 공유하기 위해 올림...
#include <string>
#include <vector>
using namespace std;
vector<int> location(int num){
vector<int> result;
if(1 == num){
result.push_back(0);
result.push_back(0);
}
else if(2 == num){
result.push_back(0);
result.push_back(1);
}
else if(3 == num){
result.push_back(0);
result.push_back(2);
}
else if(4 == num){
result.push_back(1);
result.push_back(0);
}
else if(5 == num){
result.push_back(1);
result.push_back(1);
}
else if(6 == num){
result.push_back(1);
result.push_back(2);
}
else if(7 == num){
result.push_back(2);
result.push_back(0);
}
else if(8 == num){
result.push_back(2);
result.push_back(1);
}
else if(9 == num){
result.push_back(2);
result.push_back(2);
}
else if(0 == num){
result.push_back(3);
result.push_back(1);
}
return result;
}
string middle(int num, vector<int> left, vector<int> right, string hand){
string result = "";
vector<int> targetLocation = location(num);
int resultL = 0;
int resultR = 0;
int tempL = left[0] - targetLocation[0];
if (tempL < 0){
tempL *= -1;
}
resultL = tempL;
tempL = left[1] - targetLocation[1];
if (tempL < 0){
tempL *= -1;
}
resultL += tempL;
int tempR = right[0] - targetLocation[0];
if (tempR < 0){
tempR *= -1;
}
resultR = tempR;
tempR = right[1] - targetLocation[1];
if (tempR < 0){
tempR *= -1;
}
resultR += tempR;
if(resultR == resultL){
if ("right" == hand){
result = "R";
}
else{
result = "L";
}
}
else if(resultR > resultL){
result = "L";
}
else if(resultR < resultL){
result = "R";
}
return result;
}
string solution(vector<int> numbers, string hand) {
string answer = "";
vector<int> left = {3,0};
vector<int> right = {3,2};
for(int i=0; i< numbers.size(); i++){
int target = numbers[i];
if((1 == target) || (4 == target) || (7 == target)){
answer += "L";
left = location(target);
}
else if((3 == target) || (6 == target) || (9 == target)){
answer += "R";
right = location(target);
}
else{
string middleResult = middle(target, left, right, hand);
answer += middleResult;
if ("L" == middleResult){
left = location(target);
}
else{
right = location(target);
}
}
}
return answer;
}
꾸준히 하다보면 실력이 늘겠지.
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스][C++] 없는 숫자 더하기 (0) | 2022.03.15 |
---|---|
[프로그래머스][C++] 크레인 인형뽑기 게임 (0) | 2022.03.15 |
[프로그래머스][C++] 숫자 문자열과 영단어 (0) | 2022.03.15 |
[프로그래머스][Python3] 신규 아이디 추천 (0) | 2022.03.15 |
[프로그래머스][C++] 로또의 최고 순위와 최저 순위 (0) | 2022.03.15 |