[Programmers] : 2020 카카오인턴 > 키패드 누르기
- 💾 알고리즘/프로그래머스
- 2021. 12. 4. 01:13
🔗 문제 링크
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
💻 코드
package com.kyhslam.programmers.kakao;
import java.util.Arrays;
public class cp02 {
public static int[][] board = {
{0,0},{0,1},{0,2},
{1,0},{1,1},{1,2},
{2,0},{2,1},{2,2},
{3,0},{3,1},{3,2}
};
public static void main(String[] args) {
//int[] numbers = {1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5};
int[] numbers = {7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2};
String hand = "left";
System.out.println(Arrays.deepToString(board));
/*for(int i=0; i < board.length; i++) {
for(int j=0; j < board[i].length; j++) {
System.out.println(i + "+"+ j + "=" + board[i][j]);
}
System.out.println();
}*/
System.out.println(board[8-1][0] + " , " + board[8-1][1]);
//System.out.println(Math.abs( (1) -2 ));
StringBuilder sb = new StringBuilder();
int leftIndex = 10;
int rightIndex = 12;
for(int number : numbers) {
if (number == 1 || number == 4 || number == 7) {
sb.append("L");
leftIndex = number;
} else if (number == 3 || number == 6 || number == 9) {
sb.append("R");
rightIndex = number;
} else {
if(number == 0) number = 11;
int leftDistance = getDistance(number, leftIndex);
int rightDistance = getDistance(number, rightIndex);
if(leftDistance == rightDistance) {
if(hand.equals("left")){
sb.append("L");
leftIndex = number;
}else{
sb.append("R");
rightIndex = number;
}
}
if(leftDistance > rightDistance) {
sb.append("R");
rightIndex = number;
}
if(leftDistance < rightDistance) {
sb.append("L");
leftIndex = number;
}
}
}
System.out.println("###");
System.out.println(sb.toString());
}
public static int getDistance(int pos, int curIndex) {
int distance = 0;
System.out.println(pos + " :: " + curIndex);
int x = Math.abs( board[pos-1][0] - board[curIndex-1][0]);
int y = Math.abs( board[pos-1][1] - board[curIndex-1][1]);
distance = x+y;
return distance;
}
}
다른코드
class Solution {
// 0부터 9까지 좌표 {y,x}
int[][] numpadPos = {
{3,1}, //0
{0,0}, //1
{0,1}, //2
{0,2}, //3
{1,0}, //4
{1,1}, //5
{1,2}, //6
{2,0}, //7
{2,1}, //8
{2,2} //9
};
//초기 위치
int[] leftPos = {3,0};
int[] rightPos = {3,2};
String hand;
public String solution(int[] numbers, String hand) {
this.hand = (hand.equals("right")) ? "R" : "L";
String answer = "";
for (int num : numbers) {
String Umji = pushNumber(num);
answer += Umji;
if(Umji.equals("L")) {leftPos = numpadPos[num]; continue;}
if(Umji.equals("R")) {rightPos = numpadPos[num]; continue;}
}
return answer;
}
//num버튼을 누를 때 어디 손을 사용하는가
private String pushNumber(int num) {
if(num==1 || num==4 || num==7) return "L";
if(num==3 || num==6 || num==9) return "R";
// 2,5,8,0 일때 어디 손가락이 가까운가
if(getDist(leftPos, num) > getDist(rightPos, num)) return "R";
if(getDist(leftPos, num) < getDist(rightPos, num)) return "L";
//같으면 손잡이
return this.hand;
}
//해당 위치와 번호 위치의 거리
private int getDist(int[] pos, int num) {
return Math.abs(pos[0]-numpadPos[num][0]) + Math.abs(pos[1]-numpadPos[num][1]);
}
}
'💾 알고리즘 > 프로그래머스' 카테고리의 다른 글
[Programmers] : 실패율 - Java (0) | 2021.12.17 |
---|---|
[Programmers] : 없는 숫자 더하기 > Java (0) | 2021.12.14 |
[Programmers] : 2021 Dev-Matching > 로또의 최고 순위와 최저 순위 (0) | 2021.11.20 |
[Programmers] : 2021 카카오 인턴 > 숫자 문자열과 영단어 > JAVA (0) | 2021.11.18 |
[Programmers] : 2021 KAKAO > 신규아이디 추천 > JAVA (0) | 2021.11.09 |