본문 바로가기
코딩테스트

프로그래머스 키패드 누르기

by 희안 2021. 4. 20.

이것도 프로그래머스 레벨 1 문제이다.

이것도 그냥 구현하라는대로 번호판에 맞춰 left, right 손의 위치를 

pair로 저장해줬다!

string answer = "";
	pair<int,int> left = make_pair(4,1), right = make_pair(4,3);
	vector<vector<int>> key = { {0,0,0,0},
		{0,1,2,3},
		{0,4,5,6},
		{0,7,8,9},
		{0,-1,0,-2} };

	int hand_ = 0;
	if (hand == "left") {
		hand_ = 1;
	}

	for (int i = 0; i < numbers.size(); i++) {
		if (numbers[i] == 1) {
			answer += "L";
			left = make_pair(1, 1);
		}
		else if (numbers[i] == 4) {
			answer += "L";
			left = make_pair(2, 1);
		}
		else if (numbers[i] == 7) {
			answer += "L";
			left = make_pair(3, 1);
		}
		else if (numbers[i] == 3) {
			answer += "R";
			right = make_pair(1, 3);
		}
		else if (numbers[i] == 6) {
			answer += "R";
			right = make_pair(2, 3);
		}
		else if (numbers[i] == 9) {
			answer += "R";
			right = make_pair(3, 3);
		}
		else if (numbers[i] == 2) {
			int l = abs(left.first - 1) + abs(left.second - 2);
			int r = abs(right.first - 1) + abs(right.second - 2);

			if (l < r) {
				answer += "L";
				left = make_pair(1, 2);
			}
			else if (l > r) {
				answer += "R";
				right = make_pair(1, 2);
			}
			else {
				if (hand_ == 1) {
					answer += "L";
					left = make_pair(1, 2);
				}
				else {
					answer += "R";
					right = make_pair(1, 2);
				}
			}

		}
		else if (numbers[i] == 5) {
			int l = abs(left.first - 2) + abs(left.second - 2);
			int r = abs(right.first - 2) + abs(right.second - 2);

			if (l < r) {
				answer += "L";
				left = make_pair(2, 2);
			}
			else if (l > r) {
				answer += "R";
				right = make_pair(2, 2);
			}
			else {
				if (hand_ == 1) {
					answer += "L";
					left = make_pair(2, 2);
				}
				else {
					answer += "R";
					right = make_pair(2, 2);
				}
			}
		}
		else if (numbers[i] == 8) {
			int l = abs(left.first - 3) + abs(left.second - 2);
			int r = abs(right.first - 3) + abs(right.second - 2);

			if (l < r) {
				answer += "L";
				left = make_pair(3, 2);
			}
			else if (l > r) {
				answer += "R";
				right = make_pair(3, 2);
			}
			else {
				if (hand_ == 1) {
					answer += "L";
					left = make_pair(3, 2);
				}
				else {
					answer += "R";
					right = make_pair(3, 2);
				}
			}
		}
		else if (numbers[i] == 0) {
			int l = abs(left.first - 4) + abs(left.second - 2);
			int r = abs(right.first - 4) + abs(right.second - 2);

			if (l < r) {
				answer += "L";
				left = make_pair(4, 2);
			}
			else if (l > r) {
				answer += "R";
				right = make_pair(4, 2);
			}
			else {
				if (hand_ == 1) {
					answer += "L";
					left = make_pair(4, 2);
				}
				else {
					answer += "R";
					right = make_pair(4, 2);
				}
			}
		}
	}

댓글