programmers.co.kr/learn/courses/30/lessons/67256
์ฝ๋
class Solution {
public static String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
int leftIndex = 10; // '*' => 10์ผ๋ก ์นํ
int rightIndex = 12; // '#' => 12๋ก ์นํ
for(int number : numbers) {
if(number == 1 || number == 4 || number == 7) { // Left
sb.append("L");
leftIndex = number;
} else if(number == 3 || number == 6 || number == 9) { // Right
sb.append("R");
rightIndex = number;
} else { // Center
int leftLength = getLength(leftIndex, number);
int rightLength = getLength(rightIndex, number);
if(leftLength > rightLength) {
sb.append("R");
rightIndex = number;
} else if(leftLength < rightLength) {
sb.append("L");
leftIndex = number;
} else {
if(hand.equals("right")) {
sb.append("R");
rightIndex = number;
} else {
sb.append("L");
leftIndex = number;
}
}
}
}
return sb.toString();
}
public static int getLength(int index, int number) {
// ์ซ์ 0์ ๊ฒฝ์ฐ 11๋ก ์นํ
index = (index == 0) ? 11 : index;
number = (number == 0) ? 11 : number;
int x = (index - 1) / 3;
int y = (index - 1) % 3;
int numberX = number / 3;
int numberY = 1;
return Math.abs(x-numberX) + Math.abs(y-numberY);
}
}
ํ์ด
์ด ๋ฌธ์ ์์์ ํต์ฌ์ ๊ฐ ํธ๋ํฐ ๋ฒํธ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ฐํ๋ ๊ฒ์ด๋ค.
์ ์ฌ์ง์ฒ๋ผ 0,0 ๋ถํฐ 3,2 ๊น์ง ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ ์ค๊ฐ์ ํธ๋ํฐ ๋ฒํธ(2, 5, 8, 0) ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ค์ ๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ข์ธก๊ณผ ์ฐ์ธก์ ๋ฒํธ๊ฐ ์ด๋๊ฒ์ด ๋ ๊ฐ๊น์ด์ง ํ์ ํ ์ ์๋ค.
๋ง์ฝ ๋๋ฌ์ผํ๋ ๋ฒํธ๊ฐ 5๋ฒ(1, 1), ์ข์ธก์ ํ์ฌ ์๊ฐ๋ฝ์ 7๋ฒ(2, 0) , ์ฐ์ธก์ ํ์ฌ ์๊ฐ๋ฝ์ 6๋ฒ(1, 2) ๋ผ๊ณ ๊ฐ์ ํ๋ฉด
์ข์ธก์ ๊ฑฐ๋ฆฌ๋ |1-2| + |1-0| = 2 ๊ฐ ๋๊ณ ,
์ฐ์ธก์ ๊ฑฐ๋ฆฌ๋ |1-1| + |1-2| = 1 ์ด ๋์ด์
์ฐ์ธก์ ๊ฑฐ๋ฆฌ๊ฐ ๋ ๊ฐ๊น์ฐ๋ฏ๋ก ์ฐ์ธก์ ์์ผ๋ก ๋๋ฅผ ์ ์๋ค.
๋ฐ๋ผ์ ๊ฐ๊ฐ ์ข์ธก, ์ฐ์ธก์ ๋ฒํธ - 1, 4, 7, 3, 6, 9 ์ธ ๊ฒฝ์ฐ ๋ฒํธ๋ฅผ ๋๋ฅธ ๋ค ํ์ฌ ์๊ฐ๋ฝ์ ์์น๋ฅผ ์ธ๋ฑ์ค๋ก ์ ์ฅ์ ํ๊ณ ,
์ค์ ๋ฒํธ 2, 5, 8, 0 ์ ๋๋ฌ์ผ ํ๋ ๊ฒฝ์ฐ, ํ์ฌ ์ข์ฐ ์๊ฐ๋ฝ์ ์์น๋ฅผ ์ขํ๋ก ๋ณํํด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๊ณ , ๋ ๊ฐ๊น์ด ์๊ฐ๋ฝ์ ๋๋ฌ์ฃผ๋ฉด ๋๋ค.
์ฌ๊ธฐ์ ์ค์์ ์๋ ๋ฒํธ๋ฅผ ๋๋ ์๋ ์ข, ์ฐ, ์ค์ ๋ฒํธ์ x, y ์ขํ๋ฅผ ๊ตฌํ๊ณ , ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ํ๋ฏ๋ก ๊ท์น์ ์ฐพ์์ผ ํ๋ค.
Left Center Right
1 (0, 0) 2 (0, 1) 3(0, 2)
4 (1, 0) 5 (1, 1) 6(1, 2)
7 (2, 0) 8 (2, 1) 9(2, 2)
10 (3, 0) 11 (3, 1) 12(3, 2)
์ฌ๊ธฐ์ ์ข, ์ฐ์ธก์ x ์ขํ๋ฅผ ๋ณด๋ฉด ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
(์ซ์-1) / 3 ---> (index-1) / 3
์ข, ์ฐ์ธก์ y ์ขํ์ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
(์ซ์-1) % 3 ---> (index-1) % 3
์ค์ ๋ฒํธ์ x ์ขํ์ ๊ท์น์ ์ซ์/3 ---> number / 3
์ค์ ๋ฒํธ์ y ์ขํ๋ ๋ชจ๋ 1์ด๋ค.
๊ทธ ํ ๋ฌด์จ ๊ฐ์ด ๋ ํฐ์ง ๋ชจ๋ฅด๋ฏ๋ก ์ ๋๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ x, y ์ขํ์ ๊ฑฐ๋ฆฌ ์ฐจ๋ฅผ ํฉํด์ ๋ฆฌํดํด์ฃผ๋ getLength ํจ์๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค.
* ์ด๊ธฐ ์ข์ธก, ์ฐ์ธก์ ์๊ฐ๋ฝ์ *, # ์ด๊ธฐ ๋๋ฌธ์ ์ซ์๋ก ๋ํ๋ด๊ธฐ ์ํด ๊ฐ๊ฐ 10, 12 ๋ก ๋ณํํ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ๋ฒ ์คํธ์จ๋ฒ(ํด์) (0) | 2021.06.04 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค[Java] - H-Index(์ ๋ ฌ) (0) | 2020.12.05 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ์ผ๊ฐ ๋ฌํฝ์ด (0) | 2020.09.26 |
[Programmers] - ๋ ๊ฐ ๋ฝ์์ ๋ํ๊ธฐ (0) | 2020.09.20 |
[SW Expert Academy] - (D2)1974. ์ค๋์ฟ ๊ฒ์ฆ (0) | 2020.08.10 |
๋๊ธ