문제

✏️  while문을 이용하여, number가 짝수마다 +가 출력되고, 홀수마다 -가 출력되는 코드를 작성해보세요. 
    이때, x축의 문자가 10개가 되면, 줄바꿈을 해보세요

-+-+-+-+-+
-+-+-+-+-+
-+-+-+-+-+
…(반복)

문제 해설

  • 이중 while문을 사용하여 구현하였다.
  • 두번째 while문이 반복적으로 실행하려면 변수 초기화를 해줘야 했다.
public static void main(String[] args) {
 		int i = 0;
 		int j = 0;

 		while (i < 10) {
 			while (j < 10) {
 				if ((j + 1) % 2 == 0)
 					System.out.print("+");
 				else
 					System.out.print("-");
 				j++;
 			}
 			System.out.println();
 			j = 0;
 			i++;
 		}
 	}

결과

문제

✏️  while문을 이용하여, number가 짝수마다 +가 출력되고, 홀수마다 -가 출력되는 코드를 작성해보세요.

number의 값이 100이 되면 while문을 빠져나와주세요.

-+-+-+-+-+... (반복)

문제 해설

  • 변수를 생성해서 while문이 한번 작동하면 +1이 되게 만든다.
  • 조건문을 사용하여 짝수이면 " + ", 홀수이면" - "를 출력하게 한다.

 

 

public class Ex_0616 {
 	public static void main(String[] args) {
 		int number = 1;
 		while (number <= 100) {
 			if ((number % 2) == 0)
 				System.out.print("+");
 			else
 				System.out.print("-");
 			number++;
 		}
 	}

결과

문제

💡[아이디어] 오목판에 좌표값을 입력 받아 해당 좌표에 구현해볼 생각을 했다.

  X, Y값을 입력 받아서 "오목판"에 바둑알을 출력해라!

문제 해설

  • 바둑알은 흰색, 검은색 2개가 있다.
  • X, Y 좌표값 받을 변수를 선언.
  • 계속 반복될 수 있게 while문 추가.

public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);



 		while (true) {

 			// 흰돌
 			System.out.print("검은돌 x 좌표값 : ");
 			int xx = sc.nextInt();
 			System.out.print("검은돌 y 좌표값 : ");
 			int yy = sc.nextInt();

 			// 검은돌
 			System.out.print("흰돌 x 좌표값 : ");
 			int xxx = sc.nextInt();
 			System.out.print("흰돌 y 좌표값 : ");
 			int yyy = sc.nextInt();

 			for (int x = 0; x < 12; x++) {
 				for (int y = 0; y < 10; y++)
 					if (x == 0 && y == 0)// 왼쪽 위 모서리막기
 						System.out.print("┌");
 					else if (x == 0 && y == 9)// 오른쪽 위 모서리막기
 						System.out.print("┐");
 					else if (x == 11 && y == 0)// 왼쪽 아래 모서리막기
 						System.out.print("└");
 					else if (x == 11 && y == 9)// 오른쪽 아래 모서리막기
 						System.out.print("┘");
 					else if (x == 0)// 위에 막기
 						System.out.print("┬");
 					else if (x == 11)// 아래 막기
 						System.out.print("┴");
 					else if (y == 0)// 왼쪽 막기
 						System.out.print("├");
 					else if (y == 9)// 오른쪽 막기
 						System.out.print("┤");
 					else if (x == xx && y == yy)// 검은돌
 						System.out.print("●");
 					else if (x == xxx && y == yyy)// 흰돌
 						System.out.print("○");
 					else
 						System.out.print("┼");

 				System.out.println();
 			}
 		}

결과

문제

" ┌ ┐┘└├ ┤ ┬ ┴ ┼ ─ │ " 이 기호들을 사용하여 11x11 오목판을 출력해라.

" ┌ ├ ┤ ┬ ┴ ┼ ─ │ " 이 기호들을 사용하여 11x11 오목판을 출력해라.


문제 해설

  1. ┼ 모양으로 내부를 채운다.
  2. ┌ └ 모양으로 각 모서리를 채워준다.
  3. ├ ┤를 사용하여 좌, 우 여백을 닫아준다.
  4. ┬ ┴를 사용하여 위, 아래 여백을 닫아준다.

💢중요💢 조건을 실행하는 순서를 잘 생각하지 않으면 이상한 모양이 나온다. 


public static void main(String[] args) {

		for (int x = 0; x < 12; x++) {
 			for (int y = 0; y < 10; y++)
 				 if (x == 0 && y == 9)// 오른쪽 위 모서리막기
 					System.out.print("┐");
 				else if (x == 11 && y == 9)// 오른쪽 아래 모서리막기
 					System.out.print("┘");
 				else if (x == 0 && y == 0)// 왼쪽 위 모서리막기
 					System.out.print("┌");
 				else if (x == 11 && y == 0)// 왼쪽 아래 모서리막기
 					System.out.print("└");
 				else	if (x == 0)// 위에 막기
 					System.out.print("┬");
 				else if (x == 11)// 아래 막기
 					System.out.print("┴");
 				else if (y == 0)// 왼쪽 막기
 					System.out.print("├");
 				else if (y == 9)// 오른쪽 막기
 					System.out.print("┤");
 				else
 					System.out.print("┼");

  			
 			System.out.println();
			}
		}

위 코드로 if~else if 문으로 도배를 하니까 코드가독성떨어져서 구조 개선을 하기 위해 다시 리펙토링 작업을 해보았다.


[코드 개선작업 완료]

public static void main(String[] args) {

			for (int x = 0; x < 12; x++) {
				for (int y = 0; y < 12; y++) {
					
					
					if(x==0)
						if(y==0)
							System.out.print("┌");
						else if(y==11)
							System.out.print("┐");
						else
							System.out.print("┬");
					
					else if(x==11)
						if(y==0)
							System.out.print("└");
						else if(y==11)
							System.out.print("┘");
						else 
							System.out.print("┴");
						
					else
						if(y==0)
							System.out.print("├");
						else if (y==11)
							System.out.print("┤");
						else
							System.out.print("┼");
							
				}
				System.out.println();
			}
		}

 

기존에 하나에 if문에 &&(and) 연산자를  사용하여 X, Y의 조건을 묶어서 표현하니 가독성이 떨어졌던 것이었다.

 

이런 식으로 X조건 아래에 Y조건을 붙여서 시각적으로 잘 들어오게 표현한 후 비슷한 조건들끼리 묶어줬다. 


결과

✅문제

 

반복문을 사용하여 아래 모양을 출력하시오.

 

✅문제 해설

  • 다이아몬드를 구성하려면 최소 3줄이 필요하다.
  • 짝수의 수를 입력하면 다이아몬드가 출력되지 않는다.... 이를 어떻게 해결할 것인가?
  • 입력하는 수가 홀수, 짝수 구분 없이 구현되어야 한다.
public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		System.out.print("숫자 입력 : ");
		int input = sc.nextInt();

		int a = 0;
		int b = 0;

		a = (int) (input / 2) + 1;
		b = (int) (input / 2);

		System.out.println(a);
		System.out.println(b);

		for (int i = 0; i < a; i++) {

			for (int j = 0; j < (a - 1) - i; j++) {
				System.out.printf(" ");

			}

			for (int k = 0; k < 1 + (i * 2); k++)
				System.out.printf("*");

			System.out.println();
//			----------------------------------------

			// i 0 1 2 3
			// k 1 3 5 7
		}

		for (int i = 0; i < b; i++) {
			for (int j = 0; j < i + 1; j++) {
				System.out.printf(" ");

			}

			for (int k = 0; k < b * 2 - (i * 2) - 1; k++)
				System.out.printf("*");

			System.out.println();
		}

 

✅결과

 


💢어쩌다 보니 실행되게 만들었다... 하지만 마지막 코드줄이 가시적으로 보이지 않아서 조만간...다시 코드 리펙토링을 할 생각이다..

 

To Be Continue 👊🏼

✅문제

 

반복문을 사용하여 아래 모양을 출력하시오.

✅문제 해설

  • 앞에서 만든 피라미드를 생각하고 4번째까지는 동일함을 인지한다.

https://beastit.tistory.com/52

 

[JAVA] ✏️ 별찍기 버전 3 ! (피라미드) ⭐️

✅문제 반복문을 사용하여 아래 모양을 출력하시오. ✅문제 해설 노란색 공백을 신경 쓴다! 흰색 공백은 무시해도 됨 public static void main(String[] args) { // 4줄이니까 i를 4번 반복한다. for (int i = 0; i

beastit.tistory.com

 

  • 아래 그림을 보고 구현하려고 노력해보자!

 

public static void main(String[] args) {
	
		// 4줄이니까 i를 4번 반복한다. 
		for (int i = 0; i < 4; i++) {

			//i=0일때 "j < (3 - i)" -> 공백 "   "3개 출력 
 			for (int j = 0; j < (3 - i); j++) {
 				System.out.printf(" ");
 			}

 			//i=0일때 "k < 1 + (i * 2)" -> 별 "*"개 출력 
 			for (int k = 0; k < 1 + (i * 2); k++)
 				System.out.printf("*");

 			System.out.println();

//			----------------------------------------

 		}

		// 3줄이니까 i를 3번 반복한다. 
 		for (int i = 0; i < 3; i++) {
 			
 			// i=0일때 "j < (i + 1)" -> 공백 " " 1개 출력
 			for (int j = 0; j < (i + 1); j++) {
 				System.out.printf(" ");

 			}
 			
 			// i=0일때 "k < 5 - (i * 2)" -> 별 "*****" 출력
 			for (int k = 0; k < 5 - (i * 2); k++)
 				System.out.printf("*");

 			System.out.println();
	}

}

✅결과

+ Recent posts