본문 바로가기

Algorithm/CodeUp

[CodeUp_Java] Q1090 : [기초-종합] 수 나열하기 2

반응형

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

Links

Question

문제 설명

입력

시작 값(a), 등비의 값(r), 몇 번째 인지를 나타내는 정수(n)가 공백을 두고 입력된다.(모두 0 ~ 10)

출력

n번째 수를 출력한다.

예시

  • 입력 : 2 3 7
  • 출력 : 1458

Solution (풀이)

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

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

        System.out.println(a);
        sc.close();
    }
}

1번 풀이는 Scannerwhile문을 이용한 풀이 입니다. 일반적으로 쉽게 생각할 수 있는 방법이지만 반복문이 사용 되다 보니 확실히 성능이 좋지 않습니다.

while문과 for문 언제 구분해서 사용해야 할까??
* while : 반복되는 횟수를 모를 때
* for : 반복되는 횟수를 정확히 알 때

  • 풀이 2 : 메모리 11168, 시간 65
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 r = Integer.parseInt(st.nextToken());
        int n = Integer.parseInt(st.nextToken());

        // 시작 값 a에 Math.pow() 메소드를 사용하여 r의 n-1만큼 제곱한 숫자를 곱한다.
        // n-1만큼 제곱하는 이유는 시작값 a도 n번째 숫자의 첫 숫자이기 때문이다. 
        a *= Math.pow(r, (n-1));

        System.out.println(a);
    }
}

2번 풀이처럼 반복문을 생략하고 자바에서 제공하는 Math.pow() 메소드를 사용하여 쉽게 해결 할 수도 있다.

Review

  • 한 문제를 여러가지 방법으로 푸는 연습을 하는 것이 생각보다 저에겐 많은 도움이 되었습니다.
  • 어떤 특정 코드를 구현해야 할 때, 한가지 방법만 알고 있다면 해당 방법이 통하지 않을 때 다른 대안을 모르기 때문입니다. 화이팅!
반응형