SW Expert Academy - 1225번(암호 생성기)

최지홍·2022년 2월 8일
0

SW Expert Academy

목록 보기
9/36

문제 출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14uWl6AF0CFAYD&categoryId=AV14uWl6AF0CFAYD&categoryType=CODE&problemTitle=%EC%95%94%ED%98%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;

public class Solution {

    public static void main(String[] args) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        for (int i = 0; i < 10; i++) {
            int T = Integer.parseInt(reader.readLine());
            Queue<Integer> queue = new ArrayDeque<>();
            StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
            while (tokenizer.hasMoreTokens()) {
                queue.offer(Integer.parseInt(tokenizer.nextToken()));
            }
            queue = generateCode(queue);
            sb.append("#").append(T).append(" ");
            for (int num : queue) {
                sb.append(num).append(" ");
            }
            sb.append("\n");
        }
        System.out.println(sb);
    }

    private static Queue generateCode(Queue<Integer> queue) {
        int minus = 0;

        while (true) {
            int temp = queue.poll();
            int target = temp - (minus++ % 5 + 1);
            if (target <= 0) {
                queue.offer(0);
                break;
            }
            queue.offer(target);
        }

        return queue;
    }

}

  • 문제를 꼼꼼히 읽어보지 않아서 몇 번 실패를 거듭하였다.
  • 새롭게 알게 된 것은 ArrayDeque() 클래스인데, 큐와 스택을 혼합안 Deque 자료구조를 구현한 클래스다. 근데 이게 큐로만, 스택으로만도 쓸 수 있는데 기존 LinkedList() 보다 메모리와 실행시간에서 이점이 있음을 보았다.
profile
백엔드 개발자가 되자!

0개의 댓글