반응형
https://programmers.co.kr/learn/courses/30/lessons/67256
#include <string>
#include <vector>
#include <cmath>
using namespace std;
class Hand {
public:
int col,row;
Hand(string hand) {
if(hand=="left") {
col=4;
row=1;
}
else {
col=4;
row=3;
}
}
};
int getDist(int c1,int r1,int c2,int r2) {
return abs(c1-c2)+abs(r1-r2);
}
string solution(vector<int> numbers, string hand) {
string answer = "";
Hand leftHand("left");
Hand rightHand("right");
for(int i=0;i<numbers.size();i++) {
int lhDist,rhDist;
int nCol,nRow;
if(numbers[i]==1) {
nCol=1;
nRow=1;
} else if(numbers[i]==2) {
nCol=1;
nRow=2;
}else if(numbers[i]==3) {
nCol=1;
nRow=3;
}else if(numbers[i]==4) {
nCol=2;
nRow=1;
}else if(numbers[i]==5) {
nCol=2;
nRow=2;
}else if(numbers[i]==6) {
nCol=2;
nRow=3;
}else if(numbers[i]==7) {
nCol=3;
nRow=1;
}else if(numbers[i]==8) {
nCol=3;
nRow=2;
}else if(numbers[i]==9) {
nCol=3;
nRow=3;
}else if(numbers[i]==0) {
nCol=4;
nRow=2;
}
if(numbers[i]==1||numbers[i]==4||numbers[i]==7) {
leftHand.col=nCol;
leftHand.row=nRow;
answer+="L";
continue;
}
if(numbers[i]==3||numbers[i]==6||numbers[i]==9) {
rightHand.col=nCol;
rightHand.row=nRow;
answer+="R";
continue;
}
lhDist=getDist(leftHand.col,leftHand.row,nCol,nRow);
rhDist=getDist(rightHand.col,rightHand.row,nCol,nRow);
if(lhDist<rhDist) {
leftHand.col=nCol;
leftHand.row=nRow;
answer+="L";
continue;
}
if(lhDist>rhDist) {
rightHand.col=nCol;
rightHand.row=nRow;
answer+="R";
continue;
}
if(lhDist==rhDist) {
if(hand=="left") {
leftHand.col=nCol;
leftHand.row=nRow;
answer+="L";
continue;
} else {
rightHand.col=nCol;
rightHand.row=nRow;
answer+="R";
continue;
}
}
}
return answer;
}
시뮬레이션 문제다.
모든 경우에 대해 처리해주니 운좋게 한번에 통과했다.
(한번에 통과할 때의 짜릿함은 익숙해지지 않는듯..)
이 문제에서 핵심은
왼쪽 엄지와 오른쪽 엄지의 위치라고 볼 수 있다.
각 엄지 손가락의 현재 위치를 갱신해가며
문제의 조건에 부합하는지 체크하는 방법을 선택했다.
두 버튼 간의 거리를 구할 때는
math 라이브러리에 있는 abs() 함수를 이용하여
절대값을 더하여 사용해서 편하게 풀 수 있었다.
반응형
'개발 > 알고리즘 & 자료구조' 카테고리의 다른 글
[카카오 2019 BLIND RECRUITMENT] 실패율 (프로그래머스) (0) | 2021.08.28 |
---|---|
[카카오][2021 인턴십] 숫자 문자열과 영단어 (2) | 2021.08.26 |
[코딩테스트][카카오] 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천 (0) | 2021.08.21 |
[프로그래머스][카카오] 크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십) (6) | 2021.08.13 |
[프로그래머스][위클리] 2주차 (6) | 2021.08.12 |