2493号:タワー


質問する



2493号:タワー

に近づく

  • タワーは水平直線上に一列に並んでおり、すべてのタワーはタワー順の反対方向(左)にレーザ光を放出している.
  • レーザ光を放出すると、最初に遭遇したタワーが受信できることに注意してください.
  • 高さが
  • 発射塔より低いと受信できません.
  • レーザを受信するタワーは存在しない可能性があります.

  • マイコード

    import java.io.*;
    import java.util.Stack;
    import java.util.StringTokenizer;
    
    public class Main {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static Stack<int[]> stack = new Stack<>();
        public static void main(String[] args) throws IOException {
            int N = Integer.parseInt(br.readLine());
            StringTokenizer st = new StringTokenizer(br.readLine());
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < N; i++) {
                int temp = Integer.parseInt(st.nextToken());
                while (!stack.isEmpty()) {
                    if (stack.peek()[0] < temp) stack.pop();
                    else {
                        sb.append(stack.peek()[1] + " ");
                        break;
                    }
                }
                if (stack.isEmpty())
                    sb.append(0 + " ");
                stack.push(new int[] {temp, i+1});
            }
            System.out.println(sb);
        }
    }
  • スタックにintタイプの配列を入れ、パラメータは高さと番号です.
  • はいずれにしてもリングの周りに塔の高さの入力を受けるので、対応するインデックス番号も一緒に格納するために並べられています.
  • スタックでは、各配列にタワーの情報が含まれます.
  • の隣にあるタワーの高さを比較する場合は、peek()メソッドを適切に使用します.
  • は、まず受信したタワーの番号を復元するので、スタックの上部にどのような情報があるかを考慮します.
  • この問題を解く際、「一つの塔から発射されたレーザー信号は最初に出会った一つの塔でしか受信できない」という条件を真剣に読まず、数時間悩んだ.
    「なぜフレームワークなのか」という過程を経て、私がわけのわからないところでその条件を読んでいないことに気づいたとき、私はすぐに答えを出しました.