코딩테스트연습/프로그래머스

[프로그래머스 - JAVA] 직사각형 별찍기

:)jun 2021. 11. 22. 13:14

https://programmers.co.kr/learn/courses/30/lessons/12969

 

코딩테스트 연습 - 직사각형 별찍기

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

programmers.co.kr

//테스트코드
//어떻게 짜지...? 이제까지는 출력이 하나하나씩이었는데 한번에 여러개 출력하는건 처음인데...


// 프로덕션코드
import java.util.Scanner;

public class Quiz1_rectangularStarPrinting {
    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++) {
    		oneStarRow(n);
    		nextLine();
    	}
        
    }

	private static void nextLine() {
		System.out.println();
	}

	public static void oneStarRow(int n) {
		for(int j=0; j<n; j++) {
			System.out.print("*");
		}
	}
}

//가장 안쪽 뭉탱이 부터 확인해보자!
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class Quiz1_rectangularStarPrintingTest {
	Quiz1_rectangularStarPrinting q;

	@BeforeEach
	void setUp() throws Exception {
		q= new Quiz1_rectangularStarPrinting();
	}

	@Test
	void testOneRow() {
		assertEquals("*****",q.oneStarRow(5)); //오류, oneStarRow의 리턴값이 없어서 테스트 불가
	}
}

// 아.. 이것도 출력이 하나씩 여러번 되는 거니까 이렇게 확인할 수 없겠다.
// 대신 프로덕션 코드를 "*"*n 으로 한번에 출력할 수 있으니까 바꾸고 만족해야겠다.
// String * int 라 안되네...? (python에서만 된다.)
// "*".repeat(n) 을 사용하자.
// 문제가 테스트 코드로 확인하기 힘드네...
// 프로덕션코드 리팩토링이나 하고 마무리하자.

//프로덕션 코드
import java.util.Scanner;

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

	private static void drawRectangularStar(int n, int m) {
		for(int i=0; i<m; i++) {
    		oneStarRow(n);
    		nextLine();
    	}
	}

	private static void nextLine() {
		System.out.println();
	}

	public static void oneStarRow(int n) {
		System.out.printf("*".repeat(n));
	}
}

// 굿!