728x90
https://programmers.co.kr/learn/courses/30/lessons/67256
문제 풀이
왼손과 오른손의 좌표와 누를 버튼까지의 거리를 저장하는 구조체를 선언한다.
발생하는 경우는 3가지이다.
1. 왼쪽(1, 4, 7)을 누르는 경우
2. 오른쪽(3, 6, 9)을 누르는 경우
3. 가운데(2, 5, 8, 0)를 누르는 경우
1번 경우는 왼손잡이, 오른손잡이 상관없이 왼손으로 누르면 된다.
2번 경우도 왼손잡이, 오른손잡이 상관없이 오른손으로 누르면 된다.
3번 경우는 거리를 비교한다.
더 짧은 거리를 비교해서 누르면 된다. 하지만 거리가 같다면 주로 쓰는 손으로 누른다.
느낀 점
간단한 구현 문제였다. 중간에 0의 위치를 잘못 입력해서 오류가 계속 났다...
코드
#include <string>
#include <vector>
#include <math.h>
using namespace std;
typedef struct {
int x;
int y;
int dis;
}point;
string solution(vector<int> numbers, string hand) {
string answer = "";
point left, right, num;
int tmp;
left.x = 0; left.y = 3;
right.x = 2; right.y = 3;
for (int i = 0; i < numbers.size();i++) {
if (numbers[i] == 0) {
num.x = 1; num.y = 3;
tmp = 2;
}
else {
num.x = (numbers[i] + 2) % 3;
num.y = (numbers[i] - 1) / 3;
tmp = numbers[i] % 3;
}
if (tmp == 1) {
left.x = num.x; left.y = num.y;
answer += "L";
}
else if (tmp == 0) {
right.x = num.x; right.y = num.y;
answer += "R";
}
else {
left.dis = abs(left.x - num.x) + abs(left.y - num.y);
right.dis = abs(right.x - num.x) + abs(right.y - num.y);
if (left.dis > right.dis || (left.dis == right.dis && hand == "right")) {
right.x = num.x; right.y = num.y;
answer += "R";
}
else if (left.dis < right.dis || (left.dis == right.dis && hand == "left")) {
left.x = num.x; left.y = num.y;
answer += "L";
}
}
}
return answer;
}
'문제 풀이 > 프로그래머스 (Programmers)' 카테고리의 다른 글
[C++] 프로그래머스 : 문자열 압축 (0) | 2021.09.20 |
---|---|
[C++] 프로그래머스 : 약수의 개수와 덧셈 (0) | 2021.09.13 |
[C++] 프로그래머스 : 로또의 최고 순위와 최저 순위 (0) | 2021.07.01 |
[C++] 프로그래머스 : 완주하지 못한 선수 (0) | 2021.07.01 |
[C++] 프로그래머스 : 폰켓몬 (0) | 2021.06.24 |
댓글