https://programmers.co.kr/learn/courses/30/lessons/67256
코딩테스트 연습 - 키패드 누르기
[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 2 3
4 5 6
7 8 9
* 0 #
왼쪽, 오른쪽, 중앙값을 각 벡터에 넣어서 인덱스를 비교하는 것으로 거리 계산
** 왼손 혹은 오른손이 이미 2 5 8 0 위에 올라가 있을 때, 다시 2 5 8 0 을 누르기 위한 거리 계산을 빠뜨렸었음
int distance(int cur_pos, int num) {
vector<int> vL = { 1, 4, 7, 10 };
vector<int> vR = { 3, 6, 9, 12 };
vector<int> vC = { 2, 5, 8, 0 };
int index_pos, index_C;
if (cur_pos == 1 || cur_pos == 4 || cur_pos == 7 || cur_pos == 10) {
index_pos = find(vL.begin(), vL.end(), cur_pos) - vL.begin();
index_C = find(vC.begin(), vC.end(), num) - vC.begin();
return abs(index_C - index_pos);
}
else if (cur_pos == 3 || cur_pos == 6 || cur_pos == 9 || cur_pos == 12) {
index_pos = find(vR.begin(), vR.end(), cur_pos) - vR.begin();
index_C = find(vC.begin(), vC.end(), num) - vC.begin();
return abs(index_C - index_pos);
}
else {
index_pos = find(vC.begin(), vC.end(), cur_pos) - vC.begin();
index_C = find(vC.begin(), vC.end(), num) - vC.begin();
return abs(index_C - index_pos)-1;
}
}
string solution(vector<int> numbers, string hand) {
string answer = "";
bool main_hand;
int cur_pos_R = 12;
int cur_pos_L = 10;
if (hand == "right")
main_hand = true;
else if (hand == "left")
main_hand = false;
cout << "main_hand: " << main_hand << endl;
for (int i = 0; i < numbers.size(); i++) {
cout << "numbers["<<i<< "]: " << numbers[i]<< endl;
if (numbers[i] == 1 || numbers[i]==4 || numbers[i]==7) {
cur_pos_L = numbers[i];
answer.push_back('L');
}
else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {
cur_pos_R = numbers[i];
answer.push_back('R');
}
else {
int dis_R = distance(cur_pos_R, numbers[i]);
int dis_L = distance(cur_pos_L, numbers[i]);
if (dis_R < dis_L) {
cur_pos_R = numbers[i];
answer.push_back('R');
}
else if (dis_R > dis_L) {
cur_pos_L = numbers[i];
answer.push_back('L');
}
else {
if (hand == "right") {
cur_pos_R = numbers[i];
answer.push_back('R');
}
else {
cur_pos_L = numbers[i];
answer.push_back('L');
}
}
}
}
return answer;
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 카카오프렌즈 컬러링 북 C++ (dfs) (0) | 2022.05.03 |
---|---|
[프로그래머스] 크레인 인형뽑기 게임 C++ (stack) (0) | 2022.05.03 |
[프로그래머스] 숫자 문자열과 영단어 C++ (0) | 2022.05.02 |
[프로그래머스] [1차] 추석 트래픽 C++ (0) | 2022.05.02 |
[프로그래머스] 오픈채팅방 C++ (0) | 2022.05.02 |