반응형
이문제는 핸드폰의 키패드의 거리를 구하는게 관건이었던 문제였다.
x좌표와 y좌표가 있다고 생각하고,
각각의 x좌표와 y좌표를 구해야 했다.
x좌표의 경우는 1,2,3 = 0 // 4,5,6 = 1 // 7,8,9 = 2 가 나와야했다.
y좌표의 경우는 1,4,7 = 0 // 2,5,8 = 1 // 3,6,9 = 3 이 나와야했다.
잘 살펴보면
현재값에 -1을 하고 그 값에 나누기 3을 한 몫이 x좌표 나머지가 y좌표로 생각하고 두거리의 차이를 구할 수 있는것을 알 수 있다.
좌표를 생각해내는 방법을 알아야 풀 수 있는 문제 같다............!
import java.util.*; class Solution { int leftmin = 0; int rightmin = 0; public String solution(int[] numbers, String hand) { String answer = ""; int leftnow = 10; int rightnow = 12; for(int i=0; i<numbers.length; i++){ if(numbers[i] == 0 ){ numbers[i] = 11; } if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7){ answer += "L"; leftnow = numbers[i]; }else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9){ answer += "R"; rightnow = numbers[i]; }else{ //거리구하기 guhaza(leftnow, rightnow, numbers[i]); if(leftmin < rightmin){ answer += "L"; leftnow = numbers[i]; }else if(leftmin > rightmin){ answer += "R"; rightnow = numbers[i]; }else{ if(hand.equals("right")){ answer += "R"; rightnow = numbers[i]; }else{ answer += "L"; leftnow = numbers[i]; } } } } return answer; } public void guhaza(int leftnow, int rightnow, int now){ int x = (now-1) / 3; int y = (now-1) % 3; int lx = (leftnow-1) / 3; int ly = (leftnow-1) % 3; int rx = (rightnow-1) / 3; int ry = (rightnow-1) % 3; leftmin = Math.abs(x - lx) + Math.abs(y - ly) ; rightmin = Math.abs(x - rx) + Math.abs(y - ry); } } |
반응형
'알고리즘 > 알고리즘(java,프로그래머스1,2단계위주)' 카테고리의 다른 글
자릿수 더하기 (1) | 2022.09.21 |
---|---|
소수만들기 (0) | 2021.09.19 |
숫자 문자열과 영단어 (0) | 2021.09.17 |
오픈채팅방 (0) | 2021.09.17 |
문자열 압축 (0) | 2021.09.17 |