22.4.16 [HackerRank]Java Loops II

✏️ 풀이

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

class Solution{
    public static void main(String []argh){
        Scanner in = new Scanner(System.in);
        int t=in.nextInt();
        for(int i=0;i<t;i++){
            int a = in.nextInt();
            int b = in.nextInt();
            int n = in.nextInt();
            int result = a;
            
            for(int j=0; j<n; j++){
                result += Math.pow(2,j) * b;
                System.out.printf("%d ", result);
            }
            System.out.printf("%n");
        }
        in.close();
    }
}

🌱 배경지식

  • 거듭제곱 구하기: Math.pow()
    이 method는 입력값과 출력값이 모두 실수를 표현할 수 있는 double형이며,
    Math.pow(대상 숫자, 지수)의 형태로 입력해 주면 된다.
    Math 클래스가 제공하는 클래스는 전부 Static 하기 떄문에 객체를
    생성하지 않고도 바로 생성이 가능하다.
public class Pow{
	public static void main(String[] args) {
    
    	double result = Math.pow(5, 2); //5의 제곱
        System.out.println("5의 제곱은: " +result);
    }
}
  • 실수 표현 자료형 float과 double의 차이
    float은 4바이트, double은 8바이트다. 이 차이에 걸맞게 정밀도(precision)도 double이 더 높다. 정수형에 비해 실수형은 정밀도가 떨어지는 문제가 있다.

✅ 해설 및 분석

이전 문제들과 다르게 수식이 늘어나서 매우 당황했던 문제다.

정수 a,b,n의 형식으로 위의 수식이 구성되며, q 쿼리가 주어진다.
output은 각 쿼리가 하나의 줄에 표시되며,
각 쿼리에 대해 single line에 n개의 공백으로 분리된 형태로 출력되게 만들어야 한다.

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

class Solution{
    public static void main(String []argh){
        Scanner in = new Scanner(System.in);
        int t=in.nextInt();
        for(int i=0;i<t;i++){
            int a = in.nextInt();
            int b = in.nextInt();
            int n = in.nextInt();
            int result = a; // 쿼리 수를 나타내는 정수 a를 result로 받는다. 
            
            for(int j=0; j<n; j++){ 
                result += Math.pow(2,j) * b; // a로 받은 result 값에 2의 j제곱 x b의 형태로 나타내야 한다. 
                //이때 n-1까지만 나타내면 되므로 j<n의 제약을 주어 하나씩 증가시킨다.
                System.out.printf("%d ", result); // 그간 풀어왔던 문제들과 마찬가지로 result값을 integer를 출력할 수 있는 %d에 담아 프린트해주면 된다. 
                //처음에 %d 뒤에 공백을 넣어주지 않아 오류가 났는데, 문제에서 n개의 공백으로 분리된 형태로 출력하라고 했으므로 
                //""안에 공백까지 포함하여 넣어주어야 한다.
            }
            System.out.printf("%n"); // 각 쿼리는 single line에 맞춰 출력되어야 하므로 개행처리를 해준다. 
        }
        in.close();
    }
}

👉 참고

좋은 웹페이지 즐겨찾기