2020 카카오 인턴 코테 문제
5시간을 잡고 실전처럼 진행하였으며 코드의 최적화나 알고리즘은 정확하지 않음.
코딩테스트 연습 - 키패드 누르기 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
1번문제였으며 쉬웠다. 약 30분 소요되었다.
그냥 빡구현 문제이며, 다른 1번보단 시간이 오래 걸렸다.
조건만 잘 설정한다면 크게 어려울것은 없다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int nums[4][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {-1, 0, -1} };
string solution(vector<int> numbers, string hand) {
string answer = "";
int left_row = 3, left_col = 0;
int right_row = 3, right_col = 2;
for (int i = 0; i < numbers.size(); i++)
{
if (numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7)
{
left_row = numbers[i] / 3;
left_col = 0;
answer += "L";
}
else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9)
{
right_row = (numbers[i] / 3) - 1;
right_col = 2;
answer += "R";
}
else
for (int m = 0; m < 4; m++)
if (nums[m][1] == numbers[i])
{
int left = abs(left_row - m) + abs(left_col - 1);
int right = abs(right_row - m) + abs(right_col - 1);
if (left > right)
{
right_row = m;
right_col = 1;
answer += "R";
}
else if (left < right)
{
left_row = m;
left_col = 1;
answer += "L";
}
else
{
if (hand == "right")
{
right_row = m;
right_col = 1;
answer += "R";
}
else
{
left_row = m;
left_col = 1;
answer += "L";
}
}
break;
}
}
return answer;
}
'Coding_Test > 2020_KAKAO_INTERN' 카테고리의 다른 글
[2020 카카오 인턴] 경주로 건설 (C++) (0) | 2022.05.10 |
---|---|
[2020 카카오 인턴] 보석 쇼핑 (C++) (0) | 2022.05.10 |
[2020 카카오 인턴] 수식 최대화 (C++) (0) | 2022.05.10 |