알고리즘 스터디 (수열의 변화[백준 1551])

박윤택·2022년 5월 19일
2

알고리즘

목록 보기
8/25

문제


문제 이해

N과 K를 입력받아 N개의 수를 입력받고 뒷수-앞수의 값들을 순회하면서 계산한다.
이 과정을 K번 진행했을 때의 결과를 ',' 기호를 붙여서 출력한다.

코드

import java.io.*;
import java.util.*;

public class Sequence {
  static int N, K; // 입력 받는 수
  static ArrayList<Integer> array = new ArrayList<>(); // 입력받은 숫자들을 저장

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());

    N = Integer.parseInt(st.nextToken());
    K = Integer.parseInt(st.nextToken());
    st = new StringTokenizer(br.readLine());

    for (String number : st.nextToken().split(","))
      array.add(Integer.parseInt(number)); // ArrayList에 넣기
      
    calculateSeq(0); // 재귀함수 호출
    
    // 문자 replace하여 결과값 포멧 바꾸기
    String result = array.toString().replace("[", "").replace("]", "").replace(", ", ",");
    System.out.println(result);
  }

  public static void calculateSeq(int depth) {
  	// K번 반복 후 종료
    if (depth == K)
      return;
    
    // 점화식 이용하여 값 계산후 ArrayList에 값 바꾸기
    for (int i = 0; i < array.size() - 1; i++)
      array.set(i, array.get(i + 1) - array.get(i));
    // ArrayList 마지막 값 제거
    array.remove(array.size() - 1);
    // 다시 호출
    calculateSeq(depth + 1);
  }
}

코드 설명

  1. N과 K를 입력받아 N개의 수를 ArrayList에 저장한다.
  2. 재귀 함수 호출
    2-1. 점화식 이용하여 ArrayList 값 업데이트
    2-2. ArrayList 마지막 값 제거
    2-3. 재귀 함수 다시 호출(depth를 1증가시킨다.)
    2-4. depth가 K가 될때까지 계속 반복
  3. ArrayList에 K번 점화식 적용한 결과값이 들어가 있음
  4. 문자열로 변환하여 출력 포멧을 맞추고 리턴

0개의 댓글