https://school.programmers.co.kr/learn/courses/30/lessons/67256
๐ ํ์ด : ๋งจํดํผ ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ
๊ฐ ์ซ์๋ฅผ 'ํ๋์ ์ค๋ก ๋์ด๋ ์ซ์'์ฒ๋ผ ์๊ฐํ๊ณ , 'ํคํจ๋์ ๊ท์น'์ ์ด์ฉํด์ '๋งจํดํผ ๊ฑฐ๋ฆฌ'๋ฅผ ๊ตฌํ๋ค. ๋ ์ซ์ ๊ฐ์ ํ(row) ์ฐจ์ด๋ (์ฐจ์ด / 3)์ผ๋ก, ์ด(column) ์ฐจ์ด๋ (์ฐจ์ด % 3)๋ก ๊ณ์ฐํ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ์๊ณ ๋, ๊ฐ ์๊ฐ๋ฝ์ด ๋ชฉํ ์ซ์์ ์ผ๋ง๋ ๊ฐ๊น์ด์ง ์ ์ ์๋ค.
๋งจํดํผ ๊ฑฐ๋ฆฌ(Manhattan Distance) : ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ๋, ๊ฐ๋ก์ ์ธ๋ก์ ๊ฑฐ๋ฆฌ๋ง์ ๊ณ ๋ คํ์ฌ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ
class Solution {
// ์์๋๋ก ๋ฒํธ๋ฅผ ๋๋ฅธ ์์ง์๊ฐ๋ฝ์ด ์ด๋ ์์ธ์ง ๋ฌธ์์ด๋ก ๋ฐํ
public String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
int leftNum = 10; // ์ผ์ ์ฒซ ์์น *
int rightNum = 12; // ์ค๋ฅธ์ ์ฒซ ์์น #
/* ๋ฐ๋ณต๋ฌธ */
for (int num : numbers) {
num = (num == 0) ? 11 : num; // 0์ 11๋ก ๋ณํ (ํคํจ๋ ์์น ์)
char thumb = 0; // ๋ฒํธ๋ฅผ ๋๋ฅผ ์์ง์(L/R)
switch (num) {
case 1: case 4: case 7: thumb = 'L'; break; // ์ผ์
case 3: case 6: case 9: thumb = 'R'; break; // ์ค๋ฅธ์
default: // ์ค์(๊ฐ๊น์ด ์)
/* ๊ฑฐ๋ฆฌ ๊ณ์ฐ(3์ด์ 1ํ ์ฐจ์ด) */
int lDistance = Math.abs(leftNum - num); // ์ผ์๊ณผ์ ๊ฑฐ๋ฆฌ
lDistance = lDistance / 3 + lDistance % 3;
int rDistance = Math.abs(rightNum - num); // ์ค๋ฅธ์๊ณผ์ ๊ฑฐ๋ฆฌ
rDistance = rDistance / 3 + rDistance % 3;
/* ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ํ๋จ */
if (lDistance == rDistance) thumb = hand.equals("right") ? 'R' : 'L';
else thumb = lDistance > rDistance ? 'R' : 'L';
}
if (thumb == 'L') leftNum = num;
else if (thumb == 'R') rightNum = num;
sb.append(thumb);
}
/* ๋ฐํ */
return sb.toString();
}
}
'๐ท์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ฑ๊ฒฉ ์ ํ ๊ฒ์ฌํ๊ธฐ (0) | 2024.09.02 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค/Java] 2016๋ (Calendar, LocalDate) (0) | 2024.08.22 |
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ํฐ์ผ๋ชฌ(Stream.distinct()) (0) | 2024.08.17 |
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์นด๋ ๋ญ์น(LinkedList(Queue)) (0) | 2024.08.17 |