알고리즘 문제풀이

[알고리즘] 직사각형 별찍기

wonderson 2022. 5. 13. 13:33
반응형

항해99_알고리즘 주차 문제와 해결_1

[JAVA]

문제 참고 : https://programmers.co.kr/learn/courses/30/lessons/12969

1번 문제

[직사각형 별찍기]

문제 설명

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.


제한 조건
  • n과 m은 각각 1000 이하인 자연수입니다.

예시

입력

5 3

출력

*****
*****
*****

내가 해 본 거

1. 먼저 문제분석

- 가로 n 

n=1 이면 *

n=2 이면 **

n=3 이면 ***

일 것이다. 그러면 n 받은 거를 반복해서 세로 값을 써주면 될 거 같다는 생각을 했다.

(n=3)

m=1 이면 ***

m=2 이면

***
***

m=3 이면

***
***
***

 

2. 규칙찾기 & 정리 & 코딩화

- n이 5이면 문자 * 5개 반복 ***** (줄 안바꿈)

- 그 다음 m이 3이면 n을 3번 찍어주면 된다.(줄바꾸기)

- m 세로줄 첫 번째에 n 반복되는 걸 넣어준다.

 그 다음 m 세로줄 두 번째도 n 반복되는 거 넣어준다.

[그럴려면 세로줄 반복문 먼저 쓰고 그 안에 가로 줄 반복문 쓰자]

*****
*****
*****

--1. n,m 값 주어지고

--2. m 반복문을 써준다

--3. m 반복문 안에 n 반복문을 써준다.

m반복문 - i가 세로 m 번째까지 안에 가로 n 번이 반복된다. 

n반복문 - j가 별을 n번만큼 나오게 반복한다.

int n = 5;
int m = 3;
for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        System.out.print("*");  //줄바꿈 안하는 출력 명령어 System.out.print()
    }
    System.out.println();  //줄바꿈 하는 출력 명령어 System.out.println()
}

※ 자바 출력 명령어 정리 system.out. println, print, printf
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=reeeh&logNo=220347297635

 

 

3. JAVA코드 & 결과

public class test {
    public static void main(String[] args) {
        // write your code here
        int n = 5;
        int m = 3;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
*****
*****
*****

 

※ 이제는 n,m에 사용자가 입력한 값을 받아서 직사각형 별 찍어보자

- 사용자로부터 입력값 받기 : Scanner

참고 : https://ssungkang.tistory.com/entry/java%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A1%9C-%EB%B6%80%ED%84%B0-%EA%B0%92-%EC%9E%85%EB%A0%A5%EB%B0%9B%EA%B8%B0-Scanner

 

<JAVA Code>

import java.util.Scanner;
public class test {
    public static void main(String[] args) {
        // write your code here
        Scanner sc = new Scanner(System.in);
        System.out.println("n input");
        int n = sc.nextInt();
        System.out.println("m input");
        int m = sc.nextInt();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

<결과>

n input
5
m input
3
*****
*****
*****

 

★ 문제 풀이 들고 온 거

scanner 사용 : 내가 이렇게 하고 싶었는데 다시 보니 System.out.println만 추가 안하면 똑같네?! 근데 출력하는 걸 안 적었어야 통과된다.

import java.util.Scanner;

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

        for (int i = 0; i < b; i++) {
            for (int j = 0; j < a; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
반응형