-
[Algo RhythmπΊπ] 2020 μΉ΄μΉ΄μ€ μΈν΄μ ν€ν¨λ λλ₯΄κΈ°Algo RhythmπΊπ/others 2020. 7. 4. 21:35
λ¬Έμ μ€λͺ
μ€λ§νΈν° μ ν ν€ν¨λμ κ° μΉΈμ λ€μκ³Ό κ°μ΄ μ«μλ€μ΄ μ ν μμ΅λλ€.
μ΄ μ ν ν€ν¨λμμ μΌμκ³Ό μ€λ₯Έμμ μμ§μκ°λ½λ§μ μ΄μ©ν΄μ μ«μλ§μ μ λ ₯νλ €κ³ ν©λλ€.
맨 μ²μ μΌμ μμ§μκ°λ½μ * ν€ν¨λμ μ€λ₯Έμ μμ§μκ°λ½μ # ν€ν¨λ μμΉμμ μμνλ©°, μμ§μκ°λ½μ μ¬μ©νλ κ·μΉμ λ€μκ³Ό κ°μ΅λλ€.
-
μμ§μκ°λ½μ μνμ’μ° 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λ‘ μ²λ¦¬νλ©΄ 거리 ꡬνκΈ°κ° ν¨μ¬ κΉλν΄μ§λ€λ κ²μ μ μ μμλ€. κ·Έ μΉκ΅¬μ νμ΄λ²μ μλ μ£Όμλ₯Ό λ€μ΄κ°λ©΄ λ³Ό μ μλ€. μ λ§ λ¦¬μ€ννλ μΉκ΅¬λ€...ππ
무μμ λ°°μ λ
μ΄ λ¬Έμ λ₯Ό νκΈ° μ΄λ €μ λ μ΄μ λ μ¬λ¬ λ°©λ²μ μκ°νμ§ μκ³ ν κ°μ§ λ°©λ²μλ§ λ§€λ¬λ ΈκΈ° λλ¬Έμ΄λΌκ³ μκ°νλ€. κ°λμ κ³ μ§μ κΊΎμ νμλ μμ κ² κ°λ€.
'Algo RhythmπΊπ > others' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
-