22.4.15 [HackerRank]Java Loops I

✏️ 풀이

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;



public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(bufferedReader.readLine().trim());
        if(N>=2 && N <=20){
            for (int i=1; i<=10; i++){
                System.out.printf("%d x %d = %d%n", N, i, N*i);
            }
        }
        bufferedReader.close();
    }
}

✅ 해설 및 분석

자바 반복문(loop)를 사용해서 푸는 문제다.
그에 앞서 항상 많이 보고 당연한듯 메인 함수를 시작할 때 쓰는 구문을 조금 꼼꼼하게 뜯어 봤다.

public static void main(String[] args)
* public: 당연하게도 메인함수는 어디서나 접근 가능해야 하므로 제한자를 public으로 설정
* static: 역시 메인함수이므로 가비지 콜렉터가 관여할 수 없는 static 영역에 메모리를 할당해 준다. GC에 의해 메인 함수가 정리된다면 프로그램 자체가 죽기 때문! 항상 메모리에 상주하도록 static을 준다.
* void: 역시 메인 함수이므로 리턴 값이 없게 함수를 만든다.
* main: 이건 그냥 메인! 이라는 의미
* String[] args: string을 배열로 사용하겠다는 의미. 자바 프로그램 실행 시 주어진 옵션들이 자동으로 담긴다.

BufferedReader는 Scanner와 유사하지만, 속도가 더 빠르다. 입력된 데이터가 버퍼를 거쳐서 전달되어 처리 효율성이 높고, 따라서 많은 양의 데이터를 처리할 때 유리하다.

사실 단계를 더 거치는데 왜 더 빠른가? 에 대해 의문이 있었는데, 흙을 그냥 퍼서 버리는 것 보다 수레(버퍼)에 담아서 버리는 게 더 효율적이고 많은 양을 버릴 수 있다는 비유를 보고 이해했다.

The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.

공식 문서에는 버퍼 사이즈를 특정할 수 있지만 디폴트값도 충분히 커서 대부분의 경우에 그냥 사용해도 무방하다고 나와있었다.

InputStreamReader에 대해서는 일단 링크를 참고.

문제는 간단하다. 정수 N이 주어지면 1보다 크고 10보다 작은 i 값을 곱해가며 결과를 새 라인에 출력해서 10개의 라인을 만들면 된다.

조건에서 N의 범위는 2보다 크거나 같고 20보다 작거나 같은 정수이므로 아래와 같이 만들어 주었다.

if(N>=2 && N <=20)

다음 정수 N에 곱해줄 i의 범위도 조건지어 준다.

for (int i=1; i<=10; i++) // i 변수를 1로 초기화하고, 10보다 작거나 같을때까지 하나씩 증가시키며 프로그램을 수행한다.

어제 공부한대로 문자열 포맷을 출력해주면 되는데, N x i = result 의 형태로 새로운 라인에 각각 써주어야 하므로 아래와 같이 구성했다.

System.out.printf("%d x %d = %d%n", N, i, N*i); // 곱해지는 값이 Int형으로 출력되도록 %d를 사용하고, %n으로 개행해주면 된다.

제출이 잘 되었다.

👉 참고

좋은 웹페이지 즐겨찾기