Level 1. 키패드 누르기
어렵지도 않고 보자마자 어떻게 구현해야 할지 감이 잡혀서 꽤 재밌는 문제였다.
이차원 좌표를 저장하는 Pos 구조체를 만들고 연산자 오버로딩을 이용해 각 번호의 거리를 계산하는 함수를 구현해 해결했다.
#include <iostream>
#include <vector>
using namespace std;
struct Pos
{
int x;
int y;
int operator - (const Pos& p)
{
return abs(x - p.x) + abs(y - p.y);
}
};
Pos position(int key)
{
key = (key == 0) ? 11 : key;
return Pos{--key % 3, key / 3};
}
int distance(int x, int y)
{
return position(x) - position(y);
}
string solution(vector<int> numbers, string hand)
{
string answer = "";
int L = 10, R = 12;
for (int num : numbers)
{
switch (num)
{
case 1: case 4: case 7:
L = num;
answer += "L";
break;
case 3: case 6: case 9:
R = num;
answer += "R";
break;
case 2: case 5: case 8: case 0:
{
int distL = distance(L, num);
int distR = distance(R, num);
if (distL < distR)
{
L = num;
answer += "L";
}
else if (distL > distR)
{
R = num;
answer += "R";
}
else if (hand == "left")
{
L = num;
answer += "L";
}
else if (hand == "right")
{
R = num;
answer += "R";
}
break;
}
default:
break;
}
}
return answer;
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 1. 신규 아이디 추천 (0) | 2023.03.05 |
---|---|
Level 1. 크레인 인형뽑기 게임 (0) | 2023.03.04 |
Level 1. [1차] 다트 게임 (0) | 2023.03.02 |
Level 1. 체육복 (0) | 2023.03.01 |
Level 1. 문자열 나누기 (0) | 2023.02.26 |