거누의 개발노트

프로그래머스 - Level-1, 직사각형 별찍기 본문

코딩테스트

프로그래머스 - Level-1, 직사각형 별찍기

Gogozzi 2022. 2. 28. 09:07
반응형
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
    }
}

Level 2 부터 할까 Level 1 부터 할까 고민 해봤는데...

아무래도 쉬운거부터 하면서 블로그에 익숙해 지는걸로!

 

아마 처음에 아래와 같이 주어졌을것이다.

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
    }
}

 

의문1. import를 제대로 알고있나...?

의문2. Scanner에 System.in은 어떤걸 의미하지?

의문3. 왜 메인함수 아래 코드가 있어야 실행되는가?

 

그동안은 답만 찾을 수 있으면 넘어가곤 했는데 근본적인걸 정확히 모르니 어려운 문제가 나오면 접근 조차 하지못했던것 같다.

코딩테스트 연습 별개로 Java를 깊게 알아볼 필요가 있을거같아서 Java카테고리에 조금씩 정리해 나가야겠다.

 

자, 의문1을 해결해보자

만약 우리가 다른 패키지에있는 클래스를 사용하려면 매번 앞에 패키지를 적어줘야한다. 이러한 번거로움을 줄이기 위해서 import를 사용한다고 한다.

https://mozi.tistory.com/549

 

[JAVA] 자바 임포트(import)란

자바 임포트란 다른 패키지 안의 클래스를 사용하기 위해서는 클래스 이름 앞에 패키지를 붙여야 합니다. 하지만 다른 패키지에 속한 클래스의 이름 앞에 매번 패키지 이름을 붙이는 것은 상당

mozi.tistory.com

 

* 읽어보니 import 할 때, 다른 패키지에 있는 클래스와 클래스명이 같으면 오류가 발생한다고 한다.

 

의문2. Scanner에 System.in은 멀 의미할까?

 - 키보드와 연결된 자바의 표준 입력 스트림이다.
 - 입력되는 키를 바이트로 리턴하는 저수준 스트림이다.
 - System.in을 직접 사용하면 바이트를 문자나 숫자로 변환하는 많은 어려움이 있다. 

출처: https://mine-it-record.tistory.com/103 [나만의 기록들]

왜 찾아 봤는데 의문만 생기지... 음 얼추 키보드로 입력한걸 인식해서 바이트로 바꿔준다는 거같은데...

Scanner 메소드를 보니 조금은 이해가 가는거 같기도하다. InputSteam 이라는 아이를 받는다고 되어있고, 우리는 System.in이라는 아이로 입력스트림을 Scanner에 넣어주는게 되는것이다.

얼추 조각이 맞춰지는 거같다.

 

의문3. 메인 함수 아래 코드를 작성해야하는 이유?

main 메소드는 프로그램 시작점을 의미하는 프로그램안에있는 약속과 같은 거다 메인 메소드가 없는 프로그램은 별도로 동작할 수 없고 한다.

 

이제 결론 문제를 풀어보자,

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();

        for (int i=0; i<m; i++) {
            if(i!=0) System.out.println("");
            for(int j=0;j<n; j++) {
                System.out.print("*");
            }
        }
    }
}

나는 이렇게 풀었다.

다른 사람의 풀이를 보니 신기한게 하나 있었다.

import java.util.Scanner;
import java.util.stream.IntStream;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        StringBuilder sb = new StringBuilder();
        IntStream.range(0, a).forEach(s -> sb.append("*"));
        IntStream.range(0, b).forEach(s -> System.out.println(sb.toString()));
    }
}

다음 숙제가 생겼군 ^0^ (람다 공부하기)

반응형
Comments