-
[프로그래머스] 키패드 누르기 c++Coding Test/programmers 2022. 8. 18. 20:46728x90
문제 설명
1 2 3 4 5 6 7 8 9 *(10) 0(11) #(12) 1, 4, 7, *(10) 은 왼손으로
3, 6, 9, #(12) 는 오른손으로
2, 5, 8, 0(11) 은 가까이 있는 손으로 누른다.
2, 5, 8, 0(11) 를 어떤 손으로 눌러야 하는지 계산하는게 핵심인 문제이다.
제한 사항
- numbers 배열의 크기는 1 이상 1,000 이하입니다.
- numbers 배열 원소의 값은 0 이상 9 이하인 정수입니다.
- hand는 "left" 또는 "right" 입니다.
- "left"는 왼손잡이, "right"는 오른손잡이를 의미합니다.
- 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.
입출력 예
numbers hand result [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" 풀이
현재 left, right 의 위치에서
2, 5, 8, 0(11) key까지의 거리 계산에 유의한다!
string solution(vector<int> numbers, string hand) { string answer = ""; int left = 10; int right = 12; for (int i = 0; i < numbers.size(); i++) { if (numbers[i] == 0) numbers[i] = 11; int key = numbers[i]; if (key % 3 == 0) { answer += "R"; right = key; } else if (key % 3 == 1) { answer += "L"; left = key; } else { int left_dist = abs(left - key); int right_dist = abs(right - key); int left_count = 0, right_count = 0; left_count = left_dist / 3 + left_dist % 3; right_count = right_dist / 3 + right_dist % 3; if (left_count < right_count) { left = key; answer += "L"; } else if (left_count > right_count) { right = key; answer += "R"; } else { if (hand.compare("left") == 0) { left = key; answer += "L"; } else { right = key; answer += "R"; } } } } return answer; }
728x90'Coding Test > programmers' 카테고리의 다른 글
[프로그래머스] 없는 숫자 더하기 c++ (0) 2022.08.19 [프로그래머스] 크레인 인형뽑기 c++ (0) 2022.08.18 [프로그래머스] 숫자 문자열과 영단어 c++ (0) 2022.08.18 [프로그래머스] 신규 아이디 추천 c++ (0) 2022.08.18 [프로그래머스] 로또의 최고 순위와 최저 순위 c++ (0) 2022.08.18