Algorithm/Programmers
[Java] ํ๋ก๊ทธ๋๋จธ์ค - ํคํจ๋ ๋๋ฅด๊ธฐ
๊ฐ๋ฐ๊ฐ๊ตด๐ธ
2022. 7. 3. 19:16
[๋ฌธ์ ]
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


[ํ์ด]
์ฐ์ ํ์ํ ์ ๋ณด๋ค์ ์ธํ ํฉ๋๋ค.
- (x,y)์ขํ๋ฅผ ์ ์ฅํ ์ ์๋ KeyPadํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค.
- Map<Integer, KeyPad> map์ ํคํจ๋์ ๋ชจ์๋๋ก ์ซ์๋ค์ ์์น (x,y)๋ฅผ ์ ์ฅํฉ๋๋ค.
- KeyPad right, keyPad right์ ๊ฐ๊ฐ ์์ ์์น ์ขํ๋ฅผ์ ์ฅํฉ๋๋ค.
๋ค์์ผ๋ก, numbers[]์ ํ์ํ๋ฉด์
- 1,4,7 ์ซ์๋ ์ผ์์ด ํด๋ฆญํ๋ฏ๋ก "L"์ ์ ์ฅํ๊ณ ํด๋น ์ซ์์ ์ขํ์ ์์น๋ก left๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
- 3,6,9 ์ซ์๋ ์ค๋ฅธ์์ด ํด๋ฆญํ๋ฏ๋ก "R"์ ์ ์ฅํ๊ณ ํด๋น ์ซ์์ ์ขํ์ ์์น๋ก right๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
- ๋๋จธ์ง ์ซ์๋ค์ ๋ํด์๋, click()์ ํตํด ํด๋น ์ซ์์ ๊ฐ ์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํํ, ๊ฐ๊น์ด ์์ผ๋ก ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค. ์ด๋ ๋ง์ฝ, ๋์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๋ค๋ฉด, hand์ ์ ์ฅ๋ ์์ผ๋ก ํด๋น ์ซ์๋ฅผ ๋๋ฅด๊ณ hand๋ฅผ ํด๋น ์ขํ๋ก ์ด๋์ํต๋๋ค.
[์ฝ๋]
import java.util.*;
class KeyPad{
int x;
int y;
KeyPad(int x, int y) {
this.x = x;
this.y = y;
}
}
class Solution {
static Map<Integer, KeyPad> map = new HashMap<Integer, KeyPad>(); // ์ซ์ ๋ค์ด์๋ ์์น ์ ์ฅ
static KeyPad left = new KeyPad(3,0); // ์ผ์ ์์น
static KeyPad right = new KeyPad(3,2); // ์ค๋ฅธ์ ์์น
public String solution(int[] numbers, String hand) {
String answer = "";
map.put(0, new KeyPad(3,1));
int index = 1;
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
map.put(index, new KeyPad(i,j));
index++;
}
}
for(int i=0;i<numbers.length;i++) {
// ์ผ์ชฝ์ด ๋๋ฆ
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) {
answer += "L";
left = map.get(numbers[i]);
}
// ์ค๋ฅธ์ชฝ์ด ๋๋ฆ
else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {
answer += "R";
right = map.get(numbers[i]);
}
// ๊ฐ๊น์ด ์๊ฐ๋ฝ์ด ๋๋ฆ
else {
answer += click(numbers[i], hand);
}
}
return answer;
}
public static String click(int number, String hand) {
KeyPad kp = map.get(number);
int l = Math.abs(kp.x - left.x) + Math.abs(kp.y - left.y);
int r = Math.abs(kp.x - right.x) + Math.abs(kp.y - right.y);
if(l < r) {
//์ผ์์ด ๊ฐ๊น์
left = kp;
return "L";
} else if(l > r) {
//์ค๋ฅธ์์ด ๊ฐ๊น์
right = kp;
return "R";
} else {
if(hand.equals("left")) {
left = kp;
return "L";
} else {
right = kp;
return "R";
}
}
}
}