본문 바로가기

Algorithm/CodeUp

[CodeUp_Java] Q1091 : [기초-종합] 수 나열하기 3

반응형

안녕하세요! Plitche(플리체)입니다.
이번 포스팅의 주제는 Q1091 : [기초-종합] 수 나열하기 3 (자바, JAVA)입니다.

Links

Question

문제 설명

입력

시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째 인지를 나타내는 정수(n)가 공백을 두고 입력된다.
(a, m, d는 -50 ~ +50, n은 10이하의 자연수

출력

n번째 수를 출력한다.

예시

  • 입력 : 1 -2 1 8
  • 출력 : -85

Solution (풀이)

  • 풀이 1 : 메모리 14332, 시간 116
public class Answer1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long a = sc.nextInt();
        int m = sc.nextInt();
        int d = sc.nextInt();
        int n = sc.nextInt();

        // 물론 for문을 사용하도 무관하다.
        // while문을 이용하여 n을 1씩 줄여나가고 그 숫자가 1이상이어야만 반복한다.
        while(n-->1) {
            a *= m;    // 반복할 때 마다 등비의 값 m만큼 시작 값 a에 곱하여 준다.
            a += d;    // 반복할 때 마다 더할 값 d을 a에 더해준다.
        }

        System.out.println(a);
        sc.close();
    }
}
  • 풀이 2 : 메모리 11156, 시간 66
public class Answer2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        long a = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int d = Integer.parseInt(st.nextToken());
        int n = Integer.parseInt(st.nextToken());

        // 물론 for문을 사용하도 무관하다.
        // while문을 이용하여 n을 1씩 줄여나가고 그 숫자가 1이상이어야만 반복한다.
        while(n-->1) {
            a = a*m+d;    // a의 값을 m을 곱한 값에 d를 더한 값으로 초기화한다.
        }

        System.out.println(a);
    }
}

기본적으로 두 풀이는 동일한 형태이지만, Scanner를 사용한 1번 풀이가 확실히 성능이 떨어졌고, 한번에 연산을 하는 것이 더 좋다는 결과를 알 수 있다.

사용자로부터 여러 데이터를 입력을 받을 때에는 Scanner보다는 BufferedReader 등을 사용하는 것이 좋다.

반응형