[Programmers][Java]キーボードを押す
https://programmers.co.kr/learn/courses/30/lessons/67256
📒 質問する
📒 質問する
📒 せいげんじょうけん
🌻 コード#コード# import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
//좌표로 거리를 구할거라서 키패드 번호[index] = 좌표 설정
// 배열의 마지막 두 값은 초기값 *와 #의 좌표
int a[][]={{0,1},{3,0},{3,1},{3,2},{2,0},{2,1},{2,2},{1,0},{1,1},{1,2},{0,0},{0,2}};
// 손의 위치를 리스트에 담아줌
List<Character> list = new ArrayList<>();
// 왼손과 오른손의 위치 초기화
// 왼손에서의 거리, 오른손에서의 거리 초기화
int Left =10, Right=11, leftmove =0 , rightmove =0;
for(int i=0;i<numbers.length;i++){
//1,4,7은 왼손으로만 가능
if(numbers[i]==1||numbers[i]==4||numbers[i]==7) list.add('L');
//3,6,9는 오른손으로만 가능
else if(numbers[i]==3||numbers[i]==6||numbers[i]==9) list.add('R');
// 제외한 모든 경우의 수
else{
//왼손의 이동경로
leftmove = Math.abs(a[Left][0]-a[numbers[i]][0])+Math.abs(a[Left][1]-a[numbers[i]][1]);
//오른손의 이동경로
rightmove = Math.abs(a[Right][0]-a[numbers[i]][0])+Math.abs(a[Right][1]-a[numbers[i]][1]);
if(i==0) {
list.add(Character.toUpperCase(hand.charAt(0)));
}
else {
// 거리 비교
if (leftmove > rightmove) list.add('R');
else if (leftmove < rightmove) list.add('L');
else list.add(Character.toUpperCase(hand.charAt(0)));
}
}
//왼손과 오른손의 위치 저장
if(list.get(i)=='L') Left=numbers[i];
else Right=numbers[i];
}
for(int i=0;i<list.size();i++){
answer+=list.get(i);
}
return answer;
}
}
💡 整理する
👉 座標で近づくのは簡単です。ただし、手の位置の初期値が設定されていないため、2つのテストケースだけが失敗しました。
Reference
この問題について([Programmers][Java]キーボードを押す), 我々は、より多くの情報をここで見つけました
https://velog.io/@hye_b/ProgrammersJava-키패드-누르기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
🌻 コード#コード# import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
//좌표로 거리를 구할거라서 키패드 번호[index] = 좌표 설정
// 배열의 마지막 두 값은 초기값 *와 #의 좌표
int a[][]={{0,1},{3,0},{3,1},{3,2},{2,0},{2,1},{2,2},{1,0},{1,1},{1,2},{0,0},{0,2}};
// 손의 위치를 리스트에 담아줌
List<Character> list = new ArrayList<>();
// 왼손과 오른손의 위치 초기화
// 왼손에서의 거리, 오른손에서의 거리 초기화
int Left =10, Right=11, leftmove =0 , rightmove =0;
for(int i=0;i<numbers.length;i++){
//1,4,7은 왼손으로만 가능
if(numbers[i]==1||numbers[i]==4||numbers[i]==7) list.add('L');
//3,6,9는 오른손으로만 가능
else if(numbers[i]==3||numbers[i]==6||numbers[i]==9) list.add('R');
// 제외한 모든 경우의 수
else{
//왼손의 이동경로
leftmove = Math.abs(a[Left][0]-a[numbers[i]][0])+Math.abs(a[Left][1]-a[numbers[i]][1]);
//오른손의 이동경로
rightmove = Math.abs(a[Right][0]-a[numbers[i]][0])+Math.abs(a[Right][1]-a[numbers[i]][1]);
if(i==0) {
list.add(Character.toUpperCase(hand.charAt(0)));
}
else {
// 거리 비교
if (leftmove > rightmove) list.add('R');
else if (leftmove < rightmove) list.add('L');
else list.add(Character.toUpperCase(hand.charAt(0)));
}
}
//왼손과 오른손의 위치 저장
if(list.get(i)=='L') Left=numbers[i];
else Right=numbers[i];
}
for(int i=0;i<list.size();i++){
answer+=list.get(i);
}
return answer;
}
}
💡 整理する
👉 座標で近づくのは簡単です。ただし、手の位置の初期値が設定されていないため、2つのテストケースだけが失敗しました。
Reference
この問題について([Programmers][Java]キーボードを押す), 我々は、より多くの情報をここで見つけました
https://velog.io/@hye_b/ProgrammersJava-키패드-누르기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
//좌표로 거리를 구할거라서 키패드 번호[index] = 좌표 설정
// 배열의 마지막 두 값은 초기값 *와 #의 좌표
int a[][]={{0,1},{3,0},{3,1},{3,2},{2,0},{2,1},{2,2},{1,0},{1,1},{1,2},{0,0},{0,2}};
// 손의 위치를 리스트에 담아줌
List<Character> list = new ArrayList<>();
// 왼손과 오른손의 위치 초기화
// 왼손에서의 거리, 오른손에서의 거리 초기화
int Left =10, Right=11, leftmove =0 , rightmove =0;
for(int i=0;i<numbers.length;i++){
//1,4,7은 왼손으로만 가능
if(numbers[i]==1||numbers[i]==4||numbers[i]==7) list.add('L');
//3,6,9는 오른손으로만 가능
else if(numbers[i]==3||numbers[i]==6||numbers[i]==9) list.add('R');
// 제외한 모든 경우의 수
else{
//왼손의 이동경로
leftmove = Math.abs(a[Left][0]-a[numbers[i]][0])+Math.abs(a[Left][1]-a[numbers[i]][1]);
//오른손의 이동경로
rightmove = Math.abs(a[Right][0]-a[numbers[i]][0])+Math.abs(a[Right][1]-a[numbers[i]][1]);
if(i==0) {
list.add(Character.toUpperCase(hand.charAt(0)));
}
else {
// 거리 비교
if (leftmove > rightmove) list.add('R');
else if (leftmove < rightmove) list.add('L');
else list.add(Character.toUpperCase(hand.charAt(0)));
}
}
//왼손과 오른손의 위치 저장
if(list.get(i)=='L') Left=numbers[i];
else Right=numbers[i];
}
for(int i=0;i<list.size();i++){
answer+=list.get(i);
}
return answer;
}
}
👉 座標で近づくのは簡単です。ただし、手の位置の初期値が設定されていないため、2つのテストケースだけが失敗しました。
Reference
この問題について([Programmers][Java]キーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@hye_b/ProgrammersJava-키패드-누르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol