ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [5월 넷째 주 #2-1][알고리즘] 백준 1551번 : 수열의 변화
    카테고리 없음 2022. 5. 25. 10:30

    이번 주 문제

    1️⃣  백준 1551번 : 수열의 변화
    2️⃣  백준 17278번 : 재귀함수가 뭔가요?

     


    1️⃣  백준 1551번 : 수열의 변화

     

    1551번: 수열의 변화

    첫째 줄에 수열의 크기 N과 K가 주어진다. N은 20보다 작거나 같은 자연수이고, K는 0보다 크거나 같고, N-1보다 작거나 같은 정수이다. 둘째 줄에는 수열이 ‘,’로 구분되어 주어진다. 수열을 이루

    www.acmicpc.net


    ⎈ 문제 분석

    "어떤 방법이 가장 자원을 덜 소모하고 가장 빠를까.." 항상 이렇게 생각이 시작된다. 이번 문제도 주어진 방정식을 그대로 구현하면 될 것 같다. 단, 어떤 데이터 타입과 메소드를 사용할 지 명확하게 정해야겠다.

     

    1. 입력에서 첫째 줄에 수열의 크기 N, K가 주어진다. 수열의 크기이므로 단순히 N,K를 int 형 변수에 저장하면 된다.

     

    2. 입력에에서 둘째 줄에 입력수열이 주어진다. 5,6,3,9,-1  이런식으로 콤마로 구분되어 입력된다. Scanner 클래스의 nextInt() 관련 메소드로 구분자를 콤마로 설정하여 읽을 수 있을 것 같다.

     

    3. 입력수열을 어떤 데이터타입으로 관리할지 고민해보면 배열과 어울릴 것 같다. 배열과 관련된 타입 중, ArrayList와 기본 배열을 고려해본다. 우선 한번의 계산이 수행될 때마다 새로운 객체를 생성한다면 자원의 낭비가 심할 것이다. 계산 이전의 수열상태를 유지할 필요가 없기 때문에 입력수열 객체 주소를 그대로 활용하는 것이 시스템 자원은 덜 소모할 것이다. 그리고 객체를 그대로 활용하므로 요소의 추가와 삭제가 많을 것이며 이에 적합한 ArrayList를 사용하기로 한다.

     

    4. 입력수열을 index-1까지 순회하며 주어진 방정식처럼 index에서 index-1을 빼서 index자리에 넣어준다. 순회가 끝나면 수열의 마지막 요소를 삭제한다. 여기까지가 한 번의 계산이 끝난 것이다. K회의 계산을 해야한다.

     

    5. 완료된 결과 ArrayList에 콤마를 추가하여 출력한다.

     

     

Designed by Tistory.