반응형
https://programmers.co.kr/learn/courses/30/lessons/67256
구현문제였습니다.
📕 풀이방법
📔 풀이과정
누른 번호목록이 저장되어 있는 numbers를 순회하며 답 변수 answer에 적절히 답 문자들을 뒤에 붙여주는 방식으로 구현했습니다. 1. 1, 4, 7의 경우는 왼손 2. 3, 6, 9의 경우 오른손 3. 나머지의 경우 현재 각 손가락의 위치부터 누르는 곳까지의 맨해튼 거리를 비교해 더 가까운 쪽으로 누릅니다. 거리가 같은 경우에는 hand에 따라 누릅니다.
1 ~ 3 번 과정을 수행한 후에는 누른 손의 위치를 변경해줘야합니다.
📔 정답출력
answer를 반환합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
//왼손 (3,0), 오른손 (3,2) 시작
vector <vector<int>> pad = {
{1,2,3},
{4,5,6},
{7,8,9},
{-1,0,-2},
};
struct Coord {int r, c;} leftThumb, rightThumb;
int getDist(Coord origin, Coord thumb){
return abs(thumb.r - origin.r) + abs(thumb.c - origin.c);
}
Coord getCoord(int num){
for(int i = 0; i < pad.size(); i++){
for(int j = 0; j < pad[i].size(); j++){
if(pad[i][j] == num) return {i, j};
}
}
return {0, 0};
}
string solution(vector<int> numbers, string hand) {
string answer = "";
leftThumb = {3,0};
rightThumb = {3,2};
for(auto n : numbers){
if(n == 1 || n == 4 || n == 7) {
answer += 'L';
leftThumb = getCoord(n);
}
else if(n == 3 || n == 6 || n == 9) {
answer += 'R';
rightThumb = getCoord(n);
}
else{
Coord tmp = getCoord(n);
int ldist = getDist(tmp, leftThumb);
int rdist = getDist(tmp, rightThumb);
if(ldist == rdist){
if(hand == "right") {
answer += 'R';
rightThumb = getCoord(n);
}
else {
leftThumb = getCoord(n);
answer += 'L';
}
}
else{
if(ldist < rdist) {
answer += 'L';
leftThumb = getCoord(n);
}
else {
rightThumb = getCoord(n);
answer += 'R';
}
}
}
}
return answer;
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 프로그래머스(월간 코드 챌린지 시즌3) : 없는 숫자 더하기 (0) | 2021.09.18 |
---|---|
(C++) - 백준(BOJ) 14467번 : 소가 길을 건너간 이유 1 (0) | 2021.09.15 |
(C++) - 백준(BOJ) 6764번 : Sounds fishy! (0) | 2021.09.02 |
(C++) - 백준(BOJ) 16926번 : 배열 돌리기 1 (0) | 2021.08.23 |
(C++) - 프로그래머스(위클리 챌린지) : 3주차 (0) | 2021.08.23 |