https://programmers.co.kr/learn/courses/30/lessons/67256
ํ๋ก๊ทธ๋๋จธ์ค 2020 ์นด์นด์ค ์ธํด์ญ "ํคํจ๋ ๋๋ฅด๊ธฐ" ๋ฌธ์ ํ์ด์ด๋ค.
์ผ์, ์ค๋ฅธ์์ผ๋ก ๋๋ฅด๋ ๊ฒ ์ค ์ด๋ค ๊ฒ์ด ๊ฐ๊น์ด์ง ํคํจ๋ ๊ฐ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ด ํฌ์ธํธ์ธ ๋ฌธ์ ์๋ค.
ํคํจ๋ ๋งจ ์๋ซ์ค *, 0, #์ ๊ฐ๊ฐ 10, 11, 12์ ์ซ์๋ก ๋์ฒดํ์ฌ ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ์๊ฐํด๋ณด๋ฉด ์ํ์ข์ฐ๋ก -3, 3, -1, 1๊ณผ ๊ฐ์ด ์์ง์ด๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ข์ฐ๋ก๋ ์ต๋ 2์นธ์ ์์ง์ด๋ ๊ฒ์ด ์ต๋จ ๊ฑฐ๋ฆฌ์ด๋ฏ๋ก 3์ผ๋ก ๋๋ ๋ชซ๊ณผ ๋๋จธ์ง๋ฅผ ๋ํด์ฃผ๋ฉด ํด๊ฒฐํ ์ ์์๋ค.
import java.util.*;
class Solution {
static final int[] USE_LEFT = {1, 4, 7};
static final int[] USE_RIGHT = {3, 6, 9};
public String solution(int[] numbers, String hand) {
// numbers: ์์๋๋ก ๋๋ฅผ ๋ฒํธ
// hand: ์ผ์์ก์ด(left), ์ค๋ฅธ์์ก์ด(right)
// ํคํจ๋์ ๋ฒํธ๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ์ํด *์ 10, 0์ 11, #์ 12๋ก ๊ณ์ฐ
int leftPrev = 10; // ์ผ์์ผ๋ก ๋ง์ง๋ง ๋๋ฅธ ์ซ์ (๋ํดํธ *)
int rightPrev = 12; // ์ค๋ฅธ์์ผ๋ก ๋ง์ง๋ง ๋๋ฅธ ์ซ์ (๋ํดํธ #)
String answer = "";
for (int i = 0; i < numbers.length; i++) {
// ํ์ฌ ๋๋ฅผ ๋ฒํธ (0์ผ ๊ฒฝ์ฐ 11๋ก ๋์ฒด)
int current = numbers[i] == 0 ? 11 : numbers[i];
// ์ผ์ชฝ ์์ด ๋๋ฅผ ๋ฒ์์ ํฌํจ๋ ๋ฒํธ๋ ๋ฐ๋ก ์ฒ๋ฆฌ (1, 4, 7)
if (isContain(USE_LEFT, current)) {
answer += "L";
leftPrev = current;
}
// ์ค๋ฅธ์ชฝ ์์ด ๋๋ฅผ ๋ฒ์์ ํฌํจ๋ ๋ฒํธ๋ ๋ฐ๋ก ์ฒ๋ฆฌ (3, 6, 9)
else if (isContain(USE_RIGHT, current)) {
answer += "R";
rightPrev = current;
}
// ๊ฐ์ด๋ฐ ์๋ ๋ฒํธ๋ค ์ฒ๋ฆฌ (2, 5, 8, 0)
else {
String select = "";
int leftDistance = calcDistance(Math.abs(current - leftPrev));
int rightDistance = calcDistance(Math.abs(current - rightPrev));
if (leftDistance > rightDistance) {
select = "R";
} else if (leftDistance < rightDistance) {
select = "L";
} else { // ์ผ์, ์ค๋ฅธ์ ๋ชจ๋ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ ๋
select = "left".equals(hand) ? "L" : "R";
}
if ("L".equals(select)) {
leftPrev = current;
} else {
rightPrev = current;
}
answer += select;
}
}
return answer;
}
// ๋ฐฐ์ด์ ์์๊ฐ ํฌํจ๋์ง ํ์ธ
public static boolean isContain(int[] arr, int val) {
for (int num : arr) {
if (num == val)
return true;
}
return false;
}
// ๋ฒํธ ๊ฐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
// ์ํ์ข์ฐ ์์๋ก -3, 3, -1, 1๋ก ๊ณ์ฐ
// -1, 1์ ์ต๋ 2์นธ๋ง ์ด๋ ๊ฐ๋ฅ
public static int calcDistance(int val) {
int q = val / 3; // 3์ผ๋ก ๋๋ ์ง์ง ์์ผ๋ฉด ๋๋จธ์ง๋ 1 ๋๋ 2์ด๋ฏ๋ก ์ข์ฐ๋ก ์ด๋ํ ํ์์ ์ถ๊ฐ
int r = val % 3;
return q + r;
}
}
๊ฐ ๋ฒํธ๋ฅผ ์ขํ๋ฅผ ์ด์ฉํด ์์น๋ฅผ ์ ํด์ฃผ๊ณ , ์ด๊ธฐ ์์น๋ฅผ ์ธํ ํด์ฃผ๋ ๋ฐฉ๋ฒ๋ ํ์ฉํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
'๊ฐ๋ฐ > ์๋ฃ๊ตฌ์กฐ & ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์ฃผํ์ง ๋ชปํ ์ ์ (Java) (0) | 2021.11.01 |
---|---|
ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์ (Java) (0) | 2021.10.29 |
์ซ์ ๋ฌธ์์ด๊ณผ ์๋จ์ด (Java) (0) | 2021.10.26 |
๋ฌธ์์ด ์์ถ (Java) (0) | 2021.10.25 |
์คํ์ฑํ ๋ฐฉ (Java) (0) | 2021.10.24 |
๋๊ธ