https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
#include <map>
#include <cstdlib>
using namespace std;
string solution(vector<int> numbers, string hand) {
string answer = "";
int posL=11,posR=12;
map<int,pair<int,int>> m;
m.insert({0,{3,1}});
m.insert({11,{3,0}});
m.insert({12,{3,2}});
int num=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
m.insert({++num,make_pair(i,j)});
for(int i=0;i<numbers.size();i++)
{
if(numbers[i]==1||numbers[i]==4||numbers[i]==7)
{
posL=numbers[i];
answer+="L";
}
else if(numbers[i]==3||numbers[i]==6||numbers[i]==9)
{
posR=numbers[i];
answer+="R";
}
else
{
int a = abs(m[numbers[i]].first-m[posL].first) +
abs(m[numbers[i]].second-m[posL].second);
int b = abs(m[numbers[i]].first-m[posR].first) +
abs(m[numbers[i]].second-m[posR].second);
if(a<b)
{
answer+="L";
posL = numbers[i];
}
else if(a==b)
{
if(hand=="left")
{
answer+="L";
posL = numbers[i];
}
else
{
answer+="R";
posR = numbers[i];
}
}
else
{
answer+="R";
posR = numbers[i];
}
}
}
return answer;
}
키패드의 번호와 좌표를 map에 저장하였다.
for문을 돌며 1,4,7 그리고 3,6,9에서는 각각 L,R을 추가하며
2,5,8,0 에서는 거리를 계산한다.
map에 저장한 좌표를 기준으로 거리를 계산하여 가까운 손으로 누르게한다.
'알고리즘 > 프로그래머스 1단계' 카테고리의 다른 글
프로그래머스 - 달리기 경주 - C++ (0) | 2024.07.26 |
---|---|
프로그래머스 - 성격 유형 검사하기 - C++ (0) | 2024.07.26 |
프로그래머스 - 크레인 인형뽑기 게임 - C++ (0) | 2024.07.25 |
프로그래머스 - 체육복 - C++ (0) | 2024.07.25 |
프로그래머스 - [1차] 다트 게임 - C++ (0) | 2024.07.25 |