728x90
반응형
SMALL
역시 카카오
래벨 1 문제도 호락호락하지 않다
스마트폰의 각각 키패드 왼손과 오른손 번호를 모두 L과 R로 셋팅을 했다.
그리고 맨 처음 숫자를 클릭할 때 오른손과 왼속을 셋팅까지 했다.
import java.util.*;
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
// 현재 숫자를 담을 변수
int cur = 0;
// 각 숫자간의 거리 정하기
Map<String, Integer> checkNo = new HashMap<>();
for(int i=0; i<numbers.length; i++){
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7){
// 왼쪽 정리
answer += "L";
checkNo.put("L", numbers[i]);
cur = numbers[i];
}else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9){
// 오른쪽 정리
answer += "R";
checkNo.put("R", numbers[i]);
cur = numbers[i];
}else if(numbers[i] == 2 || numbers[i] == 5 || numbers[i] == 8 || numbers[i] == 0){
// 가운데 숫자 정하기
if(i == 0){
if(hand.equals("right")){
answer += "R";
checkNo.put("R", numbers[i]);
} else {
answer += "L";
checkNo.put("L", numbers[i]);
}
}
cur = numbers[i];
}
}
return answer;
}
}
그런데 이 이후 어떻게 해야될지 생각이 안나서 힌트(질문하기)를 사용...!
이것저것 보니 이 문제는 쉽게 풀 문제가 아니였다
시간이 너무 많이 갈 것 같아서 정답보기를 통해 문제를 풀었다
대부분 거리에 대한 절대값을 가지고 손가락의 위치에 따라 가까운 값을 찾아서 값을 구했다
이 문제는 내가 풀었다고 볼 수 없으므로....
나중에 다시 풀어봐야겠다
정답
import java.util.*;
// 이건 나중에 다시 풀어보기
class Solution {
int tempL = 10;
int tempR = 12;
String myhand;
public String solution(int[] numbers, String hand) {
String answer = "";
myhand = ((hand.equals("right"))? "R": "L");
// 현재 숫자를 담을 변수
int cur = 0;
for(int i=0; i<numbers.length; i++){
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7){
// 왼쪽 정리
answer += "L";
tempL = numbers[i];
}else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9){
// 오른쪽 정리
answer += "R";
tempR = numbers[i];
}else {
String tempHand = checkHand(numbers[i]);
if(tempHand.equals("R"))
tempR = numbers[i] + ((numbers[i] == 0)? 11:0);
else tempL = numbers[i] + ((numbers[i] == 0)? 11:0);
answer += tempHand;
cur = numbers[i];
}
}
return answer;
}
public String checkHand(int tempNum) {
int leftDistance = 0;
int rightDistance = 0;
if(tempNum == 0) tempNum = 11;
leftDistance = Math.abs((tempNum-1)/3 - (tempL-1)/3) + Math.abs((tempNum-1)%3 - (tempL-1)%3);
rightDistance = Math.abs((tempNum-1)/3 - (tempR-1)/3) + Math.abs((tempNum-1)%3 - (tempR-1)%3);
return ((leftDistance == rightDistance)? myhand: (leftDistance > rightDistance)? "R": "L");
}
}
출처
프로그래머스 - https://school.programmers.co.kr/learn/courses/30/lessons/67256
728x90
반응형
LIST
'코딩 테스트' 카테고리의 다른 글
프로그래머스) 이진 변환 반복하기 Lv2 (2) | 2024.02.08 |
---|---|
프로그래머스) 예산 Lv1 (0) | 2024.02.07 |
프로그래머스) 숫자 문자열과 영단어 (0) | 2024.02.07 |
프로그래머스) 약수의 개수와 덧셈 Lv1 (2) | 2024.02.06 |
프로그래머스) 두 개 뽑아서 더하기 Lv1 (0) | 2024.02.06 |