https://programmers.co.kr/learn/courses/30/lessons/81303
λ¬Έμ μ€λͺ
μ λ¬΄μ© μννΈμ¨μ΄λ₯Ό κ°λ°νλ λλμ¦μμ€μ μΈν΄μΈ μλͺ¬λλ λͺ λ Ήμ΄ κΈ°λ°μΌλ‘ νμ νμ μ ν, μμ , 볡ꡬνλ νλ‘κ·Έλ¨μ μμ±νλ κ³Όμ λ₯Ό 맑μμ΅λλ€. μΈλΆ μꡬ μ¬νμ λ€μκ³Ό κ°μ΅λλ€
μ κ·Έλ¦Όμμ νλμμΌλ‘ μΉ ν΄μ§ μΉΈμ νμ¬ μ νλ νμ λνλ λλ€. λ¨, ν λ²μ ν νλ§ μ νν μ μμΌλ©°, νμ λ²μ(0ν ~ λ§μ§λ§ ν)λ₯Ό λ²μ΄λ μ μμ΅λλ€. μ΄λ, λ€μκ³Ό κ°μ λͺ λ Ήμ΄λ₯Ό μ΄μ©νμ¬ νλ₯Ό νΈμ§ν©λλ€.
- "U X": νμ¬ μ νλ νμμ XμΉΈ μμ μλ νμ μ νν©λλ€.
- "D X": νμ¬ μ νλ νμμ XμΉΈ μλμ μλ νμ μ νν©λλ€.
- "C" : νμ¬ μ νλ νμ μμ ν ν, λ°λ‘ μλ νμ μ νν©λλ€. λ¨, μμ λ νμ΄ κ°μ₯ λ§μ§λ§ νμΈ κ²½μ° λ°λ‘ μ νμ μ νν©λλ€.
- "Z" : κ°μ₯ μ΅κ·Όμ μμ λ νμ μλλλ‘ λ³΅κ΅¬ν©λλ€. λ¨, νμ¬ μ νλ νμ λ°λμ§ μμ΅λλ€.
μλ₯Ό λ€μ΄ μ νμμ "D 2"λ₯Ό μνν κ²½μ° μλ κ·Έλ¦Όμ μΌμͺ½μ²λΌ 4νμ΄ μ νλλ©°, "C"λ₯Ό μννλ©΄ μ νλ νμ μμ νκ³ , λ°λ‘ μλ νμ΄μλ "λ€μ€"κ° μ ν νμ μ νν©λλ€(4νμ΄ μμ λλ©΄μ μλ μλ νλ€μ΄ νλμ© λ°λ € μ¬λΌμ€κ³ , μμ λ νμμ λ€μ 4νμ μ ννλ κ²κ³Ό λμΌν©λλ€).
λ€μμΌλ‘ "U 3"μ μνν λ€μ "C"λ₯Ό μνν νμ ν μνλ μλ κ·Έλ¦Όκ³Ό κ°μ΅λλ€.
λ€μμΌλ‘ "D 4"λ₯Ό μνν λ€μ "C"λ₯Ό μνν νμ ν μνλ μλ κ·Έλ¦Όκ³Ό κ°μ΅λλ€. 5νμ΄ νμ λ§μ§λ§ ν μ΄λ―λ‘, μ΄ κ²½μ° λ°λ‘ μ νμ μ ννλ μ μ μ£Όμν©λλ€.
λ€μμΌλ‘ "U 2"λ₯Ό μννλ©΄ νμ¬ μ νλ νμ 2νμ΄ λ©λλ€.
μ μνμμ "Z"λ₯Ό μνν κ²½μ° κ°μ₯ μ΅κ·Όμ μ κ±°λ "λΌμ΄μΈ"μ΄ μ ν νμ΄ μλλλ‘ λ³΅κ΅¬λ©λλ€.
λ€μνλ² "Z"λ₯Ό μννλ©΄ κ·Έ λ€μμΌλ‘ μ΅κ·Όμ μ κ±°λ "μ½"μ΄ μ ν νμ΄ μλλλ‘ λ³΅κ΅¬λ©λλ€. μ΄λ, νμ¬ μ νλ νμ λ°λμ§ μλ μ μ μ£ΌμνμΈμ.
μ΄λ, μ΅μ’ νμ μνμ μ²μ μ£Όμ΄μ§ νμ μνλ₯Ό λΉκ΅νμ¬ μμ λμ§ μμ νμ "O", μμ λ νμ "X"λ‘ νμνλ©΄ λ€μκ³Ό κ°μ΅λλ€.
μ²μ νμ ν κ°μλ₯Ό λνλ΄λ μ μ n, μ²μμ μ νλ νμ μμΉλ₯Ό λνλ΄λ μ μ k, μνν λͺ λ Ήμ΄λ€μ΄ λ΄κΈ΄ λ¬Έμμ΄ λ°°μ΄ cmdκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, λͺ¨λ λͺ λ Ήμ΄λ₯Ό μνν ν νμ μνμ μ²μ μ£Όμ΄μ§ νμ μνλ₯Ό λΉκ΅νμ¬ μμ λμ§ μμ νμ O, μμ λ νμ Xλ‘ νμνμ¬ λ¬Έμμ΄ ννλ‘ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν μ¬ν
- 5 ≤ n ≤ 1,000,000
- 0 ≤ k < n
- 1 ≤ cmdμ μμ κ°μ ≤ 200,000
- cmdμ κ° μμλ "U X", "D X", "C", "Z" μ€ νλμ λλ€.
- Xλ 1 μ΄μ 300,000 μ΄νμΈ μμ°μμ΄λ©° 0μΌλ‘ μμνμ§ μμ΅λλ€.
- Xκ° λνλ΄λ μμ°μμ ',' λ μ£Όμ΄μ§μ§ μμ΅λλ€. μλ₯Ό λ€μ΄ 123,456μ κ²½μ° 123456μΌλ‘ μ£Όμ΄μ§λλ€.
- cmdμ λ±μ₯νλ λͺ¨λ Xλ€μ κ°μ ν©μΉ κ²°κ³Όκ° 1,000,000 μ΄νμΈ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λλ€.
- νμ λͺ¨λ νμ μ κ±°νμ¬, νμ΄ νλλ λ¨μ§ μλ κ²½μ°λ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ΅λλ€.
- λ³Έλ¬Έμμ κ° νμ΄ μ κ±°λκ³ λ³΅κ΅¬λλ κ³Όμ μ λ³΄λ€ μμ°μ€λ½κ² 보μ΄κΈ° μν΄ "μ΄λ¦" μ΄μ μ¬μ©νμμΌλ, "μ΄λ¦"μ΄μ λ΄μ©μ΄ μ€μ λ¬Έμ λ₯Ό νΈλ κ³Όμ μ νμνμ§λ μμ΅λλ€. "μ΄λ¦"μ΄μλ μλ‘ λ€λ₯Έ μ΄λ¦λ€μ΄ μ€λ³΅μμ΄ μ±μμ Έ μλ€κ³ κ°μ νκ³ λ¬Έμ λ₯Ό ν΄κ²°ν΄ μ£ΌμΈμ.
- νμ λ²μλ₯Ό λ²μ΄λλ μ΄λμ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ΅λλ€.
- μλλλ‘ λ³΅κ΅¬ν νμ΄ μμ λ(μ¦, μμ λ νμ΄ μμ λ) "Z"κ° λͺ λ Ήμ΄λ‘ μ£Όμ΄μ§λ κ²½μ°λ μμ΅λλ€.
- μ λ΅μ νμ 0νλΆν° n - 1νκΉμ§μ ν΄λΉλλ O, Xλ₯Ό μμλλ‘ μ΄μ΄λΆμΈ λ¬Έμμ΄ ννλ‘ return ν΄μ£ΌμΈμ.
νμ΄
μ²μμ HashMap <Integer, Boolean> μ μ΄μ©ν΄μ νλ €νμ§λ§, μ΄λνλ κ³Όμ μ΄ μ½μ§μμμ PASSγ°οΈ
λλ²μ§Έλ Listλ₯Ό μ΄μ©νλλ°,,,, μ νμ±μμ λͺκ° νλ¦¬κ³ ............... ν¨μ¨μ±μ΄ π©λ§!!! YEAHβΌοΈ
κ·Έλμ κ²°κ΅ μ§λ¬Έλ€μ μ°Έκ³ ν΄μ νμλ°... λκ° νΌκ±°λ~!
λ μ¨λ ..
1οΈβ£ pre, next λ°°μ΄μ μ΄μ©
- μμΉ i μ μ΄μ λ Έλ, λ€μ λ Έλμ μμΉλ₯Ό μ μ₯
- μ²μμ preμ λ§μ§λ§μ nextλ -1
2οΈβ£ LinkedListλ₯Ό μ΄μ©νμ¬ μμ , 볡ꡬ μ°μ° ꡬν
- Stack <Node> delStack
- i λ₯Ό μμ μ, pre[i], i, next[i] λ₯Ό μ μ₯
μμΉ κΈ°μ΅
- 볡ꡬμ, Node node = delStack.pop();
κ°μ₯ μ΅κ·Ό μμ λ λ Έλ
- nodeμ pre, next κ°μΌλ‘ μλ μμΉλ‘ 볡ꡬ
μ½λ
μ²μμ νλ¦Ό.... ν¨μ¨μ± π©λ§
public static String solution(int n, int k, String[] cmd) {
String answer = "";
Stack<Integer> delStack = new Stack<>();
List<Integer> list = new ArrayList<>();
int now = k;
int nowValue = k;
for(int i = 0 ; i < n ; i++){
list.add(i);
}
for(String s : cmd){
String[] op = s.split(" ");
if(op[0].equals("D")){
int x = Integer.parseInt(op[1]);
now = now + x;
nowValue = list.get(now);
}
else if(op[0].equals("U")){
int x = Integer.parseInt(op[1]);
now = now - x;
nowValue = list.get(now);
}
else if(op[0].equals("C")){
delStack.push(list.get(now));
list.remove(now);
if(list.size() <= now)
now = now - 1;
nowValue = list.get(now);
}
else{
list.add(delStack.pop());
Collections.sort(list);
if(nowValue != list.get(now)){
now = list.indexOf(nowValue);
}
}
}
int idx = 0;
for(int i = 0 ; i < list.size() ; i++){
if(list.get(i) == idx)
answer += "O";
else{
answer += "X";
i--;
}
idx++;
}
return answer;
}
λ§μ μ½λ - LinkedList μ΄μ©
public static class Node{
int pre;
int cur;
int next;
Node(int pre, int cur, int next){
this.pre = pre;
this.cur = cur;
this.next = next;
}
}
public static String solution(int n, int k, String[] cmd){
int[] pre = new int[n];
int[] next = new int[n];
for(int i = 0 ; i < n; i++){
pre[i] = i-1;
next[i] = i+1;
}
next[n-1] = -1;
Stack<Node> delStack = new Stack<>();
StringBuilder sb = new StringBuilder("O".repeat(n));
int now = k;
for(String c : cmd){
String[] op = c.split(" ");
if(op[0].equals("U")){
int x = Integer.parseInt(op[1]);
while(x-- > 0){
now = pre[now];
}
}
else if(op[0].equals("D")){
int x = Integer.parseInt(op[1]);
while(x-- > 0){
now = next[now];
}
}
else if(op[0].equals("C")){
delStack.push(new Node(pre[now], now, next[now]));
if(pre[now] != -1)
next[pre[now]] = next[now];
if(next[now] != -1)
pre[next[now]] = pre[now];
sb.setCharAt(now, 'X');
if(next[now] != -1)
now = next[now];
else
now = pre[now];
}
else{
Node node = delStack.pop();
if(node.pre != -1)
next[node.pre] = node.cur;
if(node.next != -1)
pre[node.next] = node.cur;
sb.setCharAt(node.cur, 'O');
}
}
return sb.toString();
}
'μκ³ λ¦¬μ¦ > νλ‘κ·Έλλ¨Έμ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] λΆλ μ¬μ©μ (0) | 2021.09.28 |
---|---|
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] 보μ μΌν (0) | 2021.09.23 |
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] μ ν λ²μ€ (0) | 2021.09.21 |
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] λ€λ¨κ³ μΉ«μ ν맀 (0) | 2021.09.20 |
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] μμ (0) | 2021.09.16 |