
문제
* 해당 문제의 모든 저작권은 프로그래머스 측에 있으며 본 블로그는 학업 흔적을 남겨 학업 상향을 위한 블로그로 이익을 추구하지 않으며 프로그래머스 측의 약관을 위배하지 않음을 명시합니다.*
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
풀이
구현 류 단골문제인 거 같다.
키패드라 망정이지 한글처리였으면 머리 꽤나 아팠을듯.
소스 코드
#include <string>
#include <vector>
using namespace std;
int arr[4][3] = {
1, 2, 3,
4, 5, 6,
7, 8, 9,
-1, 0, -1
};
string solution(vector<int> numbers, string hand) {
string answer = "";
pair<int, int> lh, rh;
lh = {3, 0}, rh = {3, 2};
for(int i = 0; i < numbers.size(); i++) {
// 찾기
for(int r = 0; r < 4; r++) {
for (int c = 0; c < 3; c++) {
if (numbers[i] == arr[r][c]) {
// 1 4 7 일 때
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) {
lh = {r, c};
answer += 'L';
}
// 3 6 9 일 때
else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {
rh = {r, c};
answer += 'R';
}
// 2 5 8 0 일때
else {
int ld = abs(lh.first - r) + abs(lh.second - c);
int rd = abs(rh.first - r) + abs(rh.second - c);
// 왼손이 가까움
if(ld < rd) {
lh = {r, c};
answer += 'L';
}
// 오른손이 가까움
else if (ld > rd) {
rh = {r, c};
answer += 'R';
}
// 거리 같음
else if(ld == rd) {
// 오른손잡이
if(hand == "right") {
rh = {r, c};
answer += 'R';
}
// 왼손잡이
else if(hand == "left") {
lh = {r, c};
answer += 'L';
}
}
}
}
}
}
}
return answer;
}'Programming Practice > PROGRAMMERS' 카테고리의 다른 글
| [PG] 숫자 문자열과 영단어 - Lv.1 (C++) (0) | 2022.06.25 |
|---|---|
| [PG] 로또의 최고 순위와 최저 순위 - Lv.1 (C++) (0) | 2022.06.17 |
| [PG] 신고 결과 받기 - Lv.1 (0) | 2022.06.14 |
| [PG] 신규 아이디 추천 - Lv.1 (0) | 2022.06.12 |