알고리즘

[백준, 자바, 1551번] 수열의 변화

hminor 2024. 12. 13. 22:10
반응형

풀이

  • 오늘은 간단하게 하나 풀기로 함
  • 우선 해당 문제는 단순히 수열이 주어질 때
  • 특정 인덱스를 앞 인덱스 값에서 뺀 값을 구하는 수를 구하는 문제이며
  • M번 반복하게 되면 결과로 나오는 값의 개수는
  • 기존 N의 길이에서 N-M개로 줄어들기에 그것을 유념하여 풀어야 함
  • 또한 결과를 출력 시 ,를 기준으로 출력을 하는 것으로 해결하는 것으로
  • 다음과 같이 해결.

 

import java.io.*;
import java.util.*;
import java.util.stream.Collectors;

public class _1551 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static List<Integer> li = new ArrayList<>();
    public static void main(String[] args) throws IOException {

        st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        addData(N);
        findResult(N,M);
        System.out.println(li.stream().map(String::valueOf).collect(Collectors.joining(",")));
    }

    private static void addData(int N) throws IOException {
        st = new StringTokenizer(br.readLine(),",");
        for (int i=0; i<N; i++) li.add(Integer.parseInt(st.nextToken()));
    }

    private static void findResult(int N, int M) {
        int cnt = M;
        int ln = N;
        while (cnt>0) {
            List<Integer> n_li = new ArrayList<>();
            for (int j=0; j<ln-1; j++) n_li.add(li.get(j+1)-li.get(j));
            li = new ArrayList<>(n_li);
            cnt--;
            ln--;
        }
    }
}