[Programmers/Java]81303番表の編集



Programmersテーブルの編集[202 KAO BLIND RECRUITMENT]
https://programmers.co.kr/learn/courses/30/lessons/81303
初期位置を覚えなければならない執着を捨ててこそ解決できる問題だ.
Z「最近削除した行を復元する」.
明らかに、これはStackを利用する必要がある問題ですが、Stackに格納されている情報は混乱しています.
最終的に削除点の位置を保存して解決しました.
import java.util.*;
class Solution {
    public String solution(int n, int k, String[] cmd) {
        
        StringBuilder builder = new StringBuilder();
        int rowNum = n;
        Stack<Integer> deleted = new Stack<>();
        
        for(String tmp : cmd){
            if(tmp.length() > 1){
                int x = Integer.parseInt(tmp.substring(2));
                if(tmp.charAt(0) == 'U') k -= x;
                else k += x;
            } else if (tmp.charAt(0) == 'C'){
                deleted.push(k);
                rowNum--;
                if(rowNum == k) k--;
            } else {
                rowNum++;
                if(deleted.pop() <= k) k++;
            }
        }
        
        for(int i = 0 ; i < rowNum ; i++)
            builder.append("O");
        while(!deleted.empty())
            builder.insert(deleted.pop(), "X");
        
        return builder.toString();
    }
}
.
.
.
他の人の解答から見ると、StackとともにLinkedListを実現することは模範解答である.
LinkedListを使用して、前のノードと次のノードの情報を持つノードを実装します.
削除して復元する場合も、記憶中の位置を復元します.
典型的なアルゴリズムの問題を熟知すればするほど、基礎的な資料構造を思い出すのは難しいようだ.
もっと柔軟に考えるためには、他人のコードを多く読んで、勉強を怠らないようにしましょう.