[Algo RhythmπΊπ] 2020 μΉ΄μΉ΄μ€ μΈν΄μ ν€ν¨λ λλ₯΄κΈ°
λ¬Έμ μ€λͺ
μ€λ§νΈν° μ ν ν€ν¨λμ κ° μΉΈμ λ€μκ³Ό κ°μ΄ μ«μλ€μ΄ μ ν μμ΅λλ€.
μ΄ μ ν ν€ν¨λμμ μΌμκ³Ό μ€λ₯Έμμ μμ§μκ°λ½λ§μ μ΄μ©ν΄μ μ«μλ§μ μ λ ₯νλ €κ³ ν©λλ€.
맨 μ²μ μΌμ μμ§μκ°λ½μ * ν€ν¨λμ μ€λ₯Έμ μμ§μκ°λ½μ # ν€ν¨λ μμΉμμ μμνλ©°, μμ§μκ°λ½μ μ¬μ©νλ κ·μΉμ λ€μκ³Ό κ°μ΅λλ€.
-
μμ§μκ°λ½μ μνμ’μ° 4κ°μ§ λ°©ν₯μΌλ‘λ§ μ΄λν μ μμΌλ©° ν€ν¨λ μ΄λ ν μΉΈμ κ±°λ¦¬λ‘ 1μ ν΄λΉν©λλ€.
-
μΌμͺ½ μ΄μ 3κ°μ μ«μ 1, 4, 7μ μ λ ₯ν λλ μΌμ μμ§μκ°λ½μ μ¬μ©ν©λλ€.
-
μ€λ₯Έμͺ½ μ΄μ 3κ°μ μ«μ 3, 6, 9λ₯Ό μ λ ₯ν λλ μ€λ₯Έμ μμ§μκ°λ½μ μ¬μ©ν©λλ€.
-
κ°μ΄λ° μ΄μ 4κ°μ μ«μ 2, 5, 8, 0μ μ λ ₯ν λλ λ μμ§μκ°λ½μ νμ¬ ν€ν¨λμ μμΉμμ λ κ°κΉμ΄ μμ§μκ°λ½μ μ¬μ©ν©λλ€.
4-1. λ§μ½ λ μμ§μκ°λ½μ κ±°λ¦¬κ° κ°λ€λ©΄, μ€λ₯Έμμ‘μ΄λ μ€λ₯Έμ μμ§μκ°λ½, μΌμμ‘μ΄λ μΌμ μμ§μκ°λ½μ μ¬μ©ν©λλ€.
μμλλ‘ λλ₯Ό λ²νΈκ° λ΄κΈ΄ λ°°μ΄ numbers, μΌμμ‘μ΄μΈμ§ μ€λ₯Έμμ‘μ΄μΈ μ§λ₯Ό λνλ΄λ λ¬Έμμ΄ handκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, κ° λ²νΈλ₯Ό λλ₯Έ μμ§μκ°λ½μ΄ μΌμμΈ μ§ μ€λ₯ΈμμΈ μ§λ₯Ό λνλ΄λ μ°μλ λ¬Έμμ΄ ννλ‘ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
[μ νμ¬ν]
-
numbers λ°°μ΄μ ν¬κΈ°λ 1 μ΄μ 1,000 μ΄νμ λλ€.
-
numbers λ°°μ΄ μμμ κ°μ 0 μ΄μ 9 μ΄νμΈ μ μμ λλ€.
-
handλ "left" λλ "right" μ λλ€.
-
"left"λ μΌμμ‘μ΄, "right"λ μ€λ₯Έμμ‘μ΄λ₯Ό μλ―Έν©λλ€.
-
-
μΌμ μμ§μκ°λ½μ μ¬μ©ν κ²½μ°λ L, μ€λ₯Έμ μμ§μκ°λ½μ μ¬μ©ν κ²½μ°λ Rμ μμλλ‘ μ΄μ΄λΆμ¬ λ¬Έμμ΄ ννλ‘ return ν΄μ£ΌμΈμ.
μ΄λ»κ² νμλ
import java.lang.StringBuilder;
import java.util.HashMap;
class Location {
public int row;
public int col;
public Location(int row, int col) {
this.row = row;
this.col = col;
}
}
class Solution {
private static final int STAR = 10;
private static final int HASH = 12;
public String solution(int[] numbers, String hand) {
String answer = "";
StringBuilder sbd = new StringBuilder();
HashMap<Integer, Location> numNLoc = new HashMap<Integer, Location>();
int lHand = STAR, rHand = HASH;
// init
int id = 1;
for(int r = 1; r <= 4; r++) {
for(int c = 1; c <= 3; c++) {
if(id == 11) { //zero
numNLoc.put(0, new Location(r, c));
}
else {
numNLoc.put(id, new Location(r, c));
}
id++;
}
}
for (int num : numbers) {
if (num == 0) { // 0 -> left/ right
int lDist = calcDist(numNLoc.get(lHand), numNLoc.get(num));
int rDist = calcDist(numNLoc.get(rHand), numNLoc.get(num));
if(lDist == rDist) {
switch (hand) {
case "left":
sbd.append("L");
lHand = num;
break;
case "right":
sbd.append("R");
rHand = num;
break;
}
} else { // different dist
if (lDist > rDist) {
sbd.append("R");
rHand = num;
} else {
sbd.append("L");
lHand = num;
}
}
continue;
}
switch (num % 3) {
case 0: // 3, 6, 9 -> right hand
rHand = num;
sbd.append("R");
break;
case 1: // 1, 4, 7 -> left hand
lHand = num;
sbd.append("L");
break;
case 2: // 2, 5, 8 -> left/ right
int lDist = calcDist(numNLoc.get(lHand), numNLoc.get(num));
int rDist = calcDist(numNLoc.get(rHand), numNLoc.get(num));
if (lDist == rDist) {
switch (hand) {
case "left":
sbd.append("L");
lHand = num;
break;
case "right":
sbd.append("R");
rHand = num;
break;
}
} else { // different dist
if (lDist > rDist) {
sbd.append("R");
rHand = num;
} else {
sbd.append("L");
lHand = num;
}
}
break;
}
}
answer = sbd.toString();
return answer;
}
public int calcDist(Location handLoc, Location numLoc) {
return Math.abs(handLoc.row - numLoc.row) + Math.abs(handLoc.col - numLoc.col);
}
}
μ μ λ κ² νμλ
λ¬Έμ λ₯Ό 보면 μ μ μλ―μ΄ DRY(Do not Repeat Yourself) μμΉμ μ΄κΈ΄ μ½λλ μκ³ λ‘μ§λ ν λμ μ μ 보μΈλ€. ν λ§λλ‘ λλ¬μ΄ μ½λλ€...ππ
μκ³ λ¦¬μ¦μ μκ°νκΈ° μ μ μ½λκ° λλ¬μμ§ μμΈλΆν° λ§νμλ©΄ 0μ΄ μ ν λ²νΌμ 0 κ·Έλλ‘ μ²λ¦¬νκΈΈ κ³ μ§νκΈ° λλ¬Έμ΄λ€. μμΈν μ΄μΌκΈ°λ μλμμ κ³μνκ² λ€.
μ΄ λ¬Έμ μμ κ°μ₯ μ΄λ €μ΄ λΆλΆμ΄μ ν΅μ¬μ λ²νΌ κ°μ 거리λ₯Ό ꡬνλ λΆλΆμ΄μλ€. λ²νΌ κ° κ±°λ¦¬λ₯Ό ꡬνκΈ° μν΄μλ * λ²νΌκ³Ό # λ²νΌμ νΉμ μ«μλ₯Ό idλ‘ μ ν΄μΌνλ€. κ·Έλμ * λ²νΌκ³Ό #λ²νΌμ idλ₯Ό κ°κ° 10, 12λ‘ μ νλ€. κ·Έλ¦¬κ³ λμ κ° λ²νΌμ Idλ₯Ό 3μΌλ‘ λλ 보기λ νκ³ 3μΌλ‘ λλ λλ¨Έμ§λ₯Ό ꡬν΄λ³΄κΈ°λ νμ§λ§ μ΄λ€ κ·μΉλ μ°Ύμ μ μμ΄μ κ° λ²νΌμ 거리λ₯Ό κ³μ°ν μ μμλ€. μλνλ©΄ μμ λ§νλ―μ΄ 0μ idλ₯Ό 11μ΄ μλ 0 κ·Έλλ‘ μ²λ¦¬νκΈΈ κ³ μ§νκΈ° λλ¬Έμ΄λ€.
κ° λ²νΌμ 거리λ₯Ό μ΄λ»κ² ꡬν κΉ κ³ λ―Όνλ€κ° μκ°λμ§ μμμ κ° λ²νΌμ rowμ colμ λνλ΄λ Locationμ΄λΌλ classλ₯Ό λ§λ€μλ€. κ·Έλ¦¬κ³ κ° λ²νΌμ idλ₯Ό Keyλ‘ νκ³ locationμ valueλ‘ νλ ν΄μλ§΅μ μ΄κΈ°ννλ€. κ·Έ λ€μλΆν°λ λ¬Έμ μμ μ€λͺ νκ³ μλ κ²μ²λΌ 1, 4, 7μ μΌμͺ½ μκ°λ½μΌλ‘, 3, 6, 9λ μ€λ₯Έμͺ½ μκ°λ½μΌλ‘, 2, 5, 8, 0μ λ μκ°λ½ μ€ κ±°λ¦¬κ° λ κ°κΉμ΄ μκ°λ½μΌλ‘ λ§μ½ κ±°λ¦¬κ° κ°μΌλ©΄ μμ μ΄ μ£Όλ‘ μ¬μ©νλ μμΌλ‘ λλ₯΄λλ‘ μ½λλ₯Ό μμ±νλ€.
κ°μ΄ μ€ν°λνλ μΉκ΅¬λ μκ³ λ¦¬μ¦ λΉκ΅νλ€κ° 0μ΄ μ ν λ²νΌμ idλ₯Ό 0μ΄ μλ 11λ‘ μ²λ¦¬νλ©΄ 거리 ꡬνκΈ°κ° ν¨μ¬ κΉλν΄μ§λ€λ κ²μ μ μ μμλ€. κ·Έ μΉκ΅¬μ νμ΄λ²μ μλ μ£Όμλ₯Ό λ€μ΄κ°λ©΄ λ³Ό μ μλ€. μ λ§ λ¦¬μ€ννλ μΉκ΅¬λ€...ππ
νλ‘κ·Έλλ¨Έμ€ 2020 μΉ΄μΉ΄μ€ μΈν΄μ : ν€ν¨λ λλ₯΄κΈ°
λμ΄λ β β β β β ν΄λΉ λ¬Έμ μ μ νμ λͺ¨λ₯΄κ² λ€..γ γ μ΄λ ν μλ£κ΅¬μ‘°λ₯Ό μ¬μ©νκ² μλκΈ°λνκ³ κ·Έλ₯ λ¬Έμ λ₯Ό λ³΄κ³ νΉμ μ νμ μκ°νκ³ μκ³ λ¦¬μ¦μ μΈμ΄κ² μλλΌ, ‘μ΄λ κ² μ΄λ κ²νλ©΄
0pencoding.github.io
무μμ λ°°μ λ
μ΄ λ¬Έμ λ₯Ό νκΈ° μ΄λ €μ λ μ΄μ λ μ¬λ¬ λ°©λ²μ μκ°νμ§ μκ³ ν κ°μ§ λ°©λ²μλ§ λ§€λ¬λ ΈκΈ° λλ¬Έμ΄λΌκ³ μκ°νλ€. κ°λμ κ³ μ§μ κΊΎμ νμλ μμ κ² κ°λ€.