programmers.co.kr/learn/courses/30/lessons/67256?language=java
그냥 구현 문제 입니다. 문제에 주어진 조건에 맞춰 풀면 되는 문제이다.
해결 방안
키패드의 위치를 x, y로 생각해주었다.
00~02
..
30~32
1. 일단 문제의 조건4에서 2,5,8,0 숫자 키패드가 나온경우 두 엄지손가락의 현재 키패드 위치에서 더 가까운 엄지 손가락을 사용한다고 하였으므로 왼손, 오른손 엄지의 위치를 저장할 변수를 선언해주었다.(lLoc, rLoc)
(이때, lLoc(왼손 엄지 위치)의 초깃값은 * 키패드의 위치인 {3,0}으로 rLoc(왼손 엄지 위치)의 초깃값은 # 키패드의 위치인 {3,2}로 설정해주었다.)
2. 각 숫자 패드의 위치를 ArrayList<int[]> locList에 저장해주었다. (locList.get(i) 하면 i 키패드의 위치가 나올 수 있게)
3. 조건2, 조건3과 같이 147, 369가 나온경우 각각 왼손 위치, 오른손 위치를 저장해주고 answer에는 L, R을 추가해준다.
4. 조건 4같이 2580이 나온경우 왼, 오른손과의 거리를 구해주고 더 가까운 손을 answer에 추가해준다.
이때 같으면 hand에 영향을 받도록 구현하였다.
(자세한 것은 코드의 주석 참고!)
코드
import java.util.*;
// 키패드 누르기
class Solution {
// 00~02
// ..
// 30~32
static int[] lLoc = {3, 0}; // 왼 엄 위치(*)
static int[] rLoc = {3, 2}; // 오 엄 위치(#)
static List<int[]> locList = new ArrayList<>();
public String solution(int[] numbers, String hand) {
String answer = "";
int x = 0;
int y = 0;
// 0~9 키패드 위치 저장
for(int i=0; i<=9; i++){
if(i==0)
locList.add(new int[]{3,1});
else{
locList.add(new int[]{x, y});
y++;
if(y % 3 == 0){
y = 0;
x++;
}
}
}
// 가운데 패드와 왼, 오른 엄지손가락 거리
int lDistance = 0;
int rDistance = 0;
StringBuilder sb = new StringBuilder();
for(int i=0; i<numbers.length; i++){
// 147
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7){
sb.append("L");
lLoc = locList.get(numbers[i]);
}
// 369
else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9){
sb.append("R");
rLoc = locList.get(numbers[i]);
}
// 2580
else{
// 거리 계산
lDistance = Math.abs(lLoc[0]-locList.get(numbers[i])[0]) + Math.abs(lLoc[1]-locList.get(numbers[i])[1]);
rDistance = Math.abs(rLoc[0]-locList.get(numbers[i])[0]) + Math.abs(rLoc[1]-locList.get(numbers[i])[1]);
// 거리가 같으면 손잡이 따라감
if(lDistance == rDistance){
if(hand.equals("right")){
sb.append("R");
rLoc = locList.get(numbers[i]);
}
else if(hand.equals("left")){
sb.append("L");
lLoc = locList.get(numbers[i]);
}
}
// 왼쪽
else if(lDistance < rDistance){
sb.append("L");
lLoc = locList.get(numbers[i]);
}
// 오른쪽
else if(rDistance < lDistance){
sb.append("R");
rLoc = locList.get(numbers[i]);
}
}
}
answer = new String(sb);
return answer;
}
}
'Development Logs > Algorithms' 카테고리의 다른 글
[JAVA] 백준 17615번 : 볼 모으기(한국정보올림피아드/KOI 2019 2차대회/초등부) (0) | 2020.09.17 |
---|---|
[JAVA] 백준 17614번 : 369(한국정보올림피아드/KOI 2019 2차대회/초등부) (0) | 2020.09.17 |
[JAVA] 프로그래머스 : 폰켓몬 (찾아라 프로그래밍 마에스터) (0) | 2020.09.04 |
[JAVA] 프로그래머스 : 숫자 게임 (Summer/Winter Coding(~2018)) (0) | 2020.09.02 |
[JAVA] 프로그래머스 : 점프와 순간 이동 (Summer/Winter Coding(~2018)) (0) | 2020.09.02 |