개발자꿈나무

반복문 이용해서 구구단, 삼각형 별찍기 본문

알고리즘

반복문 이용해서 구구단, 삼각형 별찍기

망재이 2023. 1. 30. 00:51
  • 구구단을 보기 좋게 구분선을 포함해서 출력해보자
public static void main(String[] args)
	{
		System.out.print("   |");
		for(int i=1;i<=9;i++) {
			System.out.printf("%3d",i);
		}
		System.out.println("\n---+---------------------------");
		
		for(int i=1;i<=9;i++) {
			System.out.printf("%2d |",i);
			for(int j=1;j<=9;j++) {
				System.out.printf("%3d",i*j);
			}
			System.out.println();
		}
	}

구구단 결과물

더보기

☆ 참고 ★

  1. 제일 첫 줄에서 "   |"와 1 ~ 9까지 출력을 제일 먼저 구성해준다.
  2. 구분선 "---+---------------------------"을 출력해준다.
  3. 만약 이 값들이 이차원 배열의 값들이라고 생각했을 때, 1차원 배열의 값의 출력을 먼저 생각해본다.
    위의 예제는 "숫자 |"이 i에서 출력되어야 하는 값들이다.
  4. 이후 안의 값들은 j의 값들을 이용해서 흔히 우리가 아는 구구단 방식으로 출력해주면 된다. 
  • 구구단을 변형해서 덧셈표를 만들면 아래와 같다.
public static void main(String[] args)
	{
		System.out.print("   |");
		for(int i=1;i<=9;i++) {
			System.out.printf("%3d",i);
		}
		System.out.println("\n---+---------------------------");
		
		for(int i=1;i<=9;i++) {
			System.out.printf("%2d |",i);
			for(int j=1;j<=9;j++) {
				System.out.printf("%3d",i+j);
			}
			System.out.println();
		}
	}

덧셈표(이 결과표를 잘 기억해두면 나중에 별찍기에도 도움이 될 것 같은 생각이다.. 온전히 내 생각)


  • 입력받은 수를 한 변으로 하는 정사각형을 *로 출력하기
public static void main(String[] args)
	{
		Scanner src = new Scanner(System.in);
		System.out.println("정사각형을 출력합니다.");
		int square;
		
		do {
			System.out.println("변의 길이 : ");
			square = src.nextInt();
		} while(square<=0);
		
		for(int i=0;i<square;i++) {
			System.out.println("*".repeat(square));
		}
	}
    //이러한 방법으로도 출력이 되지만, 메소드의 도움이 아니라 머리를 써서 다시 한번 풀어보자
public static void main(String[] args)
	{
		Scanner src = new Scanner(System.in);
		System.out.println("정사각형을 출력합니다.");
		int square;
		
		do {
			System.out.println("변의 길이 : ");
			square = src.nextInt();
		} while(square<=0);
		
		for(int i=0;i<square;i++) {
			for(int j=0;j<square;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}

  • 직각이등변 삼각형 출력하기
public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int n;
		
		System.out.println("이등변삼각형을 출력합니다.");
		
		do {
			System.out.println("몇 단 삼각형입니까? : ");
			n = in.nextInt();
		} while(n<=1);
		
		for(int i=1;i<=n;i++) {
			for(int j=1;j<=i;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}

직각삼각형 별찍기

더보기

☆ 참고 ★

행과 열의 갯수가 같음

  1. i가 1일 때, j를 1 -> 1로 증가시키면서 *를 출력하고 줄바꿈
  2. i가 2일 때, j를 1 -> 2로 증가시키면서 **를 출력하고 줄바꿈
  3. i가 3일 때, j를 1 -> 3로 증가시키면서 ***를 출력하고 줄바꿈
  4. i가 4일 때, j를 1 -> 4로 증가시키면서 ****를 출력하고 줄바꿈
  5. i가 5일 때, j를 1 -> 5로 증가시키면서 *****를 출력하고 줄바꿈
public class TriangleLB_1_17
{	
	//n단의 역직각삼각형
	static void triangleLU(int n) {
		for(int i=1;i<=n;i++) {       //n만큼의 행을 출력해야함
			for(int j=n;j>=i;j--) {   //후치감소로 최대 n개의 길이에서 점차 하나씩 줄어들게끔
				System.out.print("*");
			}
			System.out.println();
		}
	}  
	
	//오른쪽 위가 직각인 n단의 역직각삼각형 - 공백까지 생각해줘야해서 for문안에 for문이 두개 들어감
	static void triangleRU(int n) {
		for(int i=1;i<=n;i++) {         //마찬가지로 n만큼 행 길이 출력
			for(int j=1;j<i;j++) {      //공백을 먼저 처리해줘야함. 1행은 공백이 없고 2행부터 하나씩 늘어가므로 j<i라고 범위 설정(또는 j<=i-1)
				System.out.print(" ");
			}
			for(int j=n;j>=i;j--) {     //위와 마찬가지로 *의 갯수가 하나씩 줄어드므로 후치감소 적용
				System.out.print("*");  //후치증가로 표현하려면 int j=1;j<=n-i+1;j++로 설정
			}
			System.out.println();
		}
	} 
	
	//오른쪽 아래가 직각인 n단의 직각삼각형 
	static void triangleRB(int n) {
		for(int i=1;i<=n;i++) {         //마찬가지로 n만큼 행 길이 출력
			for(int j=n;j>i;j--) {      //반대로 공백이 점점 줄어드므로 후치감소에 마지막 행은 공백이 없으므로 j>i로 설정. 또는 j>=i+1로 설정
				System.out.print(" ");  //마찬가지로 위 식처럼 후치증가로 표현할 수도 있음.
			}
			for(int j=1;j<=i;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	} 
	
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int n;
		
		System.out.println("이등변삼각형을 출력합니다.");
		
		do {
			System.out.println("몇 단 삼각형입니까? : ");
			n = in.nextInt();
		} while(n<=1);

		System.out.println("n단의 역직각삼각형");
		triangleLU(n);
		System.out.println("오른쪽 위가 직각인 n단의 역직각삼각형 ");
		triangleRU(n);
		System.out.println("오른쪽 아래가 직각인 n단의 직각삼각형 ");
		triangleRB(n);
	}

}


  • '*'로 이루어진 정삼각형과, 숫자로 이루어진 정삼각형을 찍는 예제를 만들어보자
//정삼각형 출력 
	static void spira(int n) {
		for(int i=1;i<=n;i++) {
			for(int j=n;j>i;j--) {
			System.out.print(" ");
			}
			for(int j=1;j<=(i-1)*2+1;j++) {   //1 -> 3 -> 5 이런식으로 훌수 갯수만큼 출력이 돼야하므로 1+1 / 2+1 / 3+1 이렇게 되도록 범위 설정
				System.out.print("*");
			}
			System.out.println();
		}
//		for (int j = 1; j <= n - i; j++)	 // n - i 개의 ' ' 을 출력
//			System.out.print(' ');           //후치증가 (위의 공백 출력을 증가로 표현할 수도 있음)
	}
	
	//정삼각형을 *이 아닌 숫자로 출력하기
	static void npira(int n) {
		for(int i=1;i<=n;i++) {
			for(int j=1;j<=n-i;j++) {        //후치증가로 공백 출력
				System.out.print(" ");
			}for(int j=1;j<=(i-1)*2+1;j++) { //* 대신 숫자를 출력해줘야 하므로 나머지 값을 출력
				System.out.print(i%10);
			}
			System.out.println();
		}
	}
	
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int n;
		
		System.out.println("이등변삼각형을 출력합니다.");
		
		do {
			System.out.println("몇 단 삼각형입니까? : ");
			n = in.nextInt();
		} while(n<=1);
        
		System.out.println("n단의 정삼각형 ");
		spira(n);
		System.out.println("n단의 숫자로 이루어진 정삼각형 ");
		npira(n);
	}

}

728x90

'알고리즘' 카테고리의 다른 글

1. 학생 이름, 학번 출력 프로그램  (0) 2023.02.05
배열 - 최댓값, 역순 정렬, 복사  (0) 2023.01.30
반복 , 가우스의 덧셈 계산  (0) 2023.01.29
순서도의 기호  (0) 2023.01.29
조건 판단과 분기  (0) 2023.01.29