did_story
[νλ‘κ·Έλλ¨Έμ€ / JAVA] ν νΈμ§ λ³Έλ¬Έ
[νλ‘κ·Έλλ¨Έμ€ / JAVA] ν νΈμ§
μ΄μ μμ 2025. 10. 9. 20:29https://school.programmers.co.kr/learn/courses/30/lessons/81303
λ¬Έμ
μ λ¬΄μ© μννΈμ¨μ΄λ₯Ό κ°λ°νλ λλμ¦μμ€μ μΈν΄μΈ μλͺ¬λλ λͺ λ Ήμ΄ κΈ°λ°μΌλ‘ νμ νμ μ ν, μμ , 볡ꡬνλ νλ‘κ·Έλ¨μ μμ±νλ κ³Όμ λ₯Ό λ§‘μμ΅λλ€. μΈλΆ μꡬ μ¬νμ λ€μκ³Ό κ°μ΅λλ€
μ κ·Έλ¦Όμμ νλμμΌλ‘ μΉ ν΄μ§ μΉΈμ νμ¬ μ νλ νμ λνλ λλ€. λ¨, ν λ²μ ν νλ§ μ νν μ μμΌλ©°, νμ λ²μ(0ν ~ λ§μ§λ§ ν)λ₯Ό λ²μ΄λ μ μμ΅λλ€. μ΄λ, λ€μκ³Ό κ°μ λͺ λ Ήμ΄λ₯Ό μ΄μ©νμ¬ νλ₯Ό νΈμ§ν©λλ€.
- "U X": νμ¬ μ νλ νμμ XμΉΈ μμ μλ νμ μ νν©λλ€.
- "D X": νμ¬ μ νλ νμμ XμΉΈ μλμ μλ νμ μ νν©λλ€.
- "C" : νμ¬ μ νλ νμ μμ ν ν, λ°λ‘ μλ νμ μ νν©λλ€. λ¨, μμ λ νμ΄ κ°μ₯ λ§μ§λ§ νμΈ κ²½μ° λ°λ‘ μ νμ μ νν©λλ€.
- "Z" : κ°μ₯ μ΅κ·Όμ μμ λ νμ μλλλ‘ λ³΅κ΅¬ν©λλ€. λ¨, νμ¬ μ νλ νμ λ°λμ§ μμ΅λλ€.
μλ₯Ό λ€μ΄ μ νμμ "D 2"λ₯Ό μνν κ²½μ° μλ κ·Έλ¦Όμ μΌμͺ½μ²λΌ 4νμ΄ μ νλλ©°, "C"λ₯Ό μννλ©΄ μ νλ νμ μμ νκ³ , λ°λ‘ μλ νμ΄μλ "λ€μ€"κ° μ ν νμ μ νν©λλ€(4νμ΄ μμ λλ©΄μ μλ μλ νλ€μ΄ νλμ© λ°λ € μ¬λΌμ€κ³ , μμ λ νμμ λ€μ 4νμ μ ννλ κ²κ³Ό λμΌν©λλ€).
νμ΄
μ²μ λ¬Έμ λ₯Ό ν λ μκ°νκ²μ stackμ μ κ±°λ indexλ₯Ό μμ°¨μ μΌλ‘ μ§μ΄λ£μΌλ©΄ λμ€μ κΊΌλ΄λ©΄μ μΆκ°νλκ² μ’μ§ μμκΉ μκ°νλ€.
- "C" μ "Z" κ° μ λ ₯λ λλ§λ€ n μ ν¬κΈ°λ₯Ό μ‘°μ νλ€.
- stackμ μμ λ νμ indexλ₯Ό μ μ₯νλ€.
- μ΅μ’ nλ§νΌ StringBuilderμ "O"λ₯Ό repeatνκ³
- λ§μ§λ§μΌλ‘ stackμμ ν΄λΉ indexλ₯Ό κΊΌλ΄λ©΄μ "X" λ₯Ό μ£Όμ (insert)νλ€.
μ΄λ κ² νλλ°, (μ λ΅μ΄ λμμ§λ§) λ€λ₯Έ λΆλ€μ νμ΄λ₯Ό 보λ€κ° λ΄κ° μλͺ» νΌ κ²μ λ°κ²¬νμλ€. (μΆμ²: λΉλ₯λ²€λ₯ IT logging)
λ€μ νΌ νμ΄
1. κ° νμ μ΄μ νκ³Ό λ€μ νμ λν μ 보λ₯Ό λ΄μ λ°°μ΄μ λ§λ λ€.
2. μ€νμ μ¬μ©ν΄ μμ ν νμ μ 보λ₯Ό μ μ₯νλ€.
3. StringBuilderλ₯Ό μ¬μ©ν΄ κ²°κ³Ό λ¬Έμμ΄μ λ§λ λ€.
4. λͺ
λ Ήμ΄λ₯Ό νλμ© μ²λ¦¬νλ€.
- U X : XμΉΈ μλ‘ μ΄λ
- D X : XμΉΈ μλλ‘ μ΄λ
- C : νμ¬ μ νλ νμ μμ νκ³ , λ°λ‘ μλ νμ μ ν.
λ§μ½, μμ λ νμ΄ λ§μ§λ§ νμ΄λΌλ©΄ λ°λ‘ μ νμ μ ννλ€. - Z : κ°μ₯ μ΅κ·Όμ μμ λ νμ 볡ꡬνλ€. 볡ꡬλ νμ μλ μλ μμΉμ λμκ°λ€.
5. λͺ¨λ λͺ λ Ήμ΄λ₯Ό μ²λ¦¬ν ν, κ²°κ³Ό λ¬Έμμ΄μ λ°ννλ€.
μ λ΅
import java.util.Stack;
class Solution {
public class Node {
int pre;
int cur;
int nxt;
public Node(int pre, int cur, int nxt){
this.pre = pre;
this.cur = cur;
this.nxt = nxt;
}
}
public String solution(int n, int k, String[] cmd) {
int[] pres = new int[n];
int[] nxts = new int[n];
Stack<Node> stack = new Stack<>();
StringBuilder sb = new StringBuilder("O".repeat(n));
for(int i = 0 ; i < n; i++){
pres[i] = i - 1;
nxts[i] = i + 1;
}
nxts[n-1] = -1;
for(String s : cmd){
char c = s.charAt(0);
if(c == 'U'){
int num = Integer.parseInt(s.substring(2));
while(num-- > 0) k = pres[k];
} else if (c == 'D'){
int num = Integer.parseInt(s.substring(2));
while(num-- > 0) k = nxts[k];
} else if (c == 'C'){
stack.push(new Node(pres[k], k, nxts[k]));
if(pres[k] != -1) nxts[pres[k]] = nxts[k];
if(nxts[k] != -1) pres[nxts[k]] = pres[k];
sb.setCharAt(k, 'X');
if(nxts[k] != -1) k = nxts[k];
else k = pres[k];
} else {
Node node = stack.pop();
if(node.pre != -1) nxts[node.pre] = node.cur;;
if(node.nxt != -1) pres[node.nxt] = node.cur;;
sb.setCharAt(node.cur, 'O');
}
}
return sb.toString();
}
}
* insertλ μμμλΆν° ν΄λΉ indexκΉμ§ λ€ μ°Ύμκ°λ κ²μ΄λΌ, n * nμ λ¬Έμ κ° μκΈ΄λ€. μ΄λ₯Ό κΉλ¨Ήμ§ λ§μ..
μ°Έμ‘°
'Algorithmπ > νλ‘κ·Έλλ¨Έμ€(Programmers)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [νλ‘κ·Έλλ¨Έμ€ / JAVA] λ€λ¦¬λ₯Ό μ§λλ νΈλ (0) | 2026.05.14 |
|---|---|
| [νλ‘κ·Έλλ¨Έμ€ / JAVA] μ΄λͺ¨ν°μ½ ν μΈνμ¬. (0) | 2025.10.12 |
| [νλ‘κ·Έλλ¨Έμ€ / JAVA] λλκ³Ό λ§λ κ·Έλν. (0) | 2025.09.30 |
| [νλ‘κ·Έλλ¨Έμ€ / Java] 거리λκΈ° νμΈνκΈ° (0) | 2025.09.29 |
| [νλ‘κ·Έλλ¨Έμ€ / μλ°] 곡μμ°μ± (0) | 2025.09.12 |