TIL - 06. 별가위바위보 [230719]

송원철·2023년 7월 19일

오늘 배운 느낌

코드를 통해서 피라미드 별을 만들고, 가위바위보 게임을 만들어 보았다.
반복문과 분기문을 이용하는 것이 어렵긴 했지만,
모양으로 보여지는게 있어서 나름 재미도 있었다.
다만 Math, equal같은 새로운 명령어가 있어서
적응하려면 복습하고 연습해봐야겠다.

중첩 반복문

// ** 중첩반복문 **
	public void ex16() {
		// 구구단 모두 출력하기
		
		for(int dan = 2; dan <= 9; dan++) { // 2~9 단까지 차례대로 증가
			
			for(int num = 1; num <= 9; num++) { // 각 단에 곱해질 수 1~9까지 차례대로 증가
				
				System.out.printf("%2d X %2d = %2d", dan, num, dan * num);
				
			}
			System.out.println(); // 하나의 단 출력이 끝났을 때 줄바꿈
			// 아무내용 없는 println() == 줄바꿈
		}
		
	}
	
	
	public void ex17() {
		// 구구단 역순 출력
		// 9단 -> 2단까지 역방향
		// 곱해지는 수는 1 -> 9 정방향
	
		for(int dan = 9; dan >= 2; dan--) {
			
			for(int num = 1; num <= 9; num++) {
				
				System.out.printf("%2d X %2d = %2d", dan, num, dan * num);

			}
			System.out.println(); // 하나의 단 출력이 끝났을 때 줄바꿈
		}
	
	}
	
	
	public void ex18 () {
		// 2중 for 문을 이용해서 다음 모양을 출력하시오
		
		// 12345
		// 12345
		// 12345
		// 12345
		// 12345
		
		for(int i = 1; i <= 5; i++) { // 5바퀴 반복하는 for문
			for(int j = 1; j <= 5; j++) { // 12345 한 줄 출력하는 for문
				System.out.print(j);
			}
			System.out.println();
		}
		
		System.out.println("--------------------------------------");
	}

	
	public void ex19 () {
		// 54321
		// 54321
		// 54321
		
		for(int i = 1; i <= 3; i++) {
			for (int j = 5; j >= 1; j--) {
				System.out.print(j);
			}
			System.out.println();
		}
		 
	}
	
	
	public void ex20() {
		// 2중 for문을 이용하여 다음 모양을 출력하시오.
		
		// 1
		// 12
		// 123
		// 1234
		
		for(int i = 1; i <= 4; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(j);
			}
			System.out.println();
		}
	}
	
	
	public void ex21() {
		// 4321
		// 321
		// 21
		// 1
		
		for(int i = 4; i >= 1 ; i--) {
			for(int j = i; j >= 1; j--) {
				System.out.print(j);
			}
			System.out.println();
		}
		
	}
	
	
	public void ex22() {
		// 숫자세기 count
		
		// 1부터 20까지 1씩 증가하면서
		// 3의 배수의 총 개수 출력
		// 3의 배수의 합계 출력
		
		// 3 6 9 12 15 18 : 6개
		// 3의 배수 합계 : 63
		
		int count = 0; // 3의 배수의 개수를 세기 위한 변수
		int sum = 0; // 3의 배수의 합계를 구하기 위한 변수
		
		for(int i = 1; i <= 20; i++) {
			if (i % 3 == 0) {
				System.out.print(i + " ");
				count++;
				sum += i;
			}
		}
		System.out.println(": " + count + "개");
		System.out.println("3의 배수 합계 : " + sum);
		
	}
	
	
	public void ex23 () {
		
		// 2중 for문과 count를 이용해서 아래모양 출력하기
		
		// 1  2  3  4
		// 5  6  7  8
		// 9 10 11 12
		
		int count = 1;
		
		for(int i = 1; i <= 3; i++) { // 3줄
			for(int j = 1; j <= 4; j++) { // 4칸
				System.out.printf("%3d", count);
				count++;
				}
			System.out.println();
		}
		
	}
	
	
	public void ex24 () {
		for(int i = 1; i <= 9; i++) {
			for(int dan = 2; dan <= 9; dan++) {
				System.out.printf("%d X %d = %d		", dan, i, dan * i);
			}
			System.out.println();
		}
		
	}

LoopPractice

public class LoopPractice {

	Scanner sc = new Scanner(System.in);
	
	public void practice1() {
	    System.out.print("1 이상의 숫자를 입력하세요: ");
	    int num = sc.nextInt();
	    
	    if (num >= 1) {
	        for (int i = 1; i <= num; i++) {
	            System.out.print(i + " ");
	        }
	    } else {
	        System.out.print("1 이상의 숫자를 입력해주세요.");
	    }
	}
	
	
	public void practice2() {
	    System.out.print("1 이상의 숫자를 입력하세요: ");
	    int num = sc.nextInt();
	    
	    if (num >= 1) {
	        for (int i = num; i <= num; i--) {
	            System.out.print(i + " ");
	            if (i == 1) {
	            	return;
	            }
	        }
	    } else {
	        System.out.print("1 이상의 숫자를 입력해주세요.");
	    }
	}
	
	
	public void practice3() {
		System.out.print("정수를 하나 입력하세요 : ");
		int num = sc.nextInt();
		int sum = 0;
		String equation = "";
		
			for (int i = 1; i <= num; i++) {
				sum += i;
				if (i < num) {
		            equation += i + " + ";
		        } else {
		            equation += i;
		        }
		    }
		    
		    System.out.println(equation + " = " + sum);
	}
	
	
	public void practice4() {
	    System.out.print("첫 번째 숫자: ");
	    int num1 = sc.nextInt();
	    
	    System.out.print("두 번째 숫자: ");
	    int num2 = sc.nextInt();
	    
	    if (num1 < 1 || num2 < 1) {
	        System.out.print("1 이상의 숫자를 입력해주세요.");
	    return;
	    }
	    if (num1 >= num2) {
	    	for (int i = num2; i <= num1; i++) {
	        System.out.print(i + " ");
	    	}
	    }
	    if (num1 < num2) {
	    	for (int i = num1; i <= num2; i++) {
	    	System.out.print(i + " ");
	    	}
	    }
	}
	
	
	public void practice5() {
		
		System.out.print("숫자 : ");
		int dan = sc.nextInt();
		System.out.printf("=====%d단=====\n",dan);
		
		for (int i = 1; i <= 9; i++) {
			System.out.printf("%d * %d = %d\n", dan, i, dan * i);
		}
		
	}
	
	
	public void practice6() {
		
		System.out.print("숫자 : ");
		int dan = sc.nextInt();
		
		if (dan < 2 || dan >9) {
			System.out.print("2~9 사이 숫자만 입력해주세요.");
			return;
		}
			
		System.out.printf("===== %d단 =====\n", dan);
		
		for(int i = 1; i <= 9; i++) {
				System.out.printf("%d X %d = %d\n", dan, i, dan * i);
		}
		
	}
	
	
	public void practice7() {
		
		System.out.print("정수 입력 : ");
		int num = sc.nextInt();
		
		for (int i = 1; i <= num; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		
	}
	
	
	public void practice8() {
		
		System.out.print("정수 입력 : ");
		int num = sc.nextInt();
		
		for (int i = num; i >= 1; i--) {
			for (int j = i; j >= 1; j--) {
				System.out.print("*");	
			}
			System.out.println();
		}
		
	}
	
	
	public void practice9() {
		
		System.out.print("정수 입력 : ");
		int num = sc.nextInt();
		
		for (int i = 1; i <= num; i++) {
			for (int j = num; j >= 1; j--) {
				if (i >= j) {
					System.out.print("*");
				} else {
				System.out.print(" ");
				}
			}
			System.out.println();
		}
		
	}
	
	
	public void practice10() {
		
		System.out.print("정수 입력 : ");
		int num = sc.nextInt();
		
		for (int i = 1; i <= num; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        
        for (int i = num - 1; i >= 1; i--) {
            for (int j = i; j >= 1; j--) {
                System.out.print("*");
            }
            System.out.println();
        }
		
	}

	
	public void practice11() {
		
		System.out.print("정수 입력 : ");
		int num = sc.nextInt();
		
		for (int i = 0; i < num; i++) {
			for (int j = 1; j < num - i; j++) {
					System.out.print(" ");
			}
			for (int k = 0; k < 2 * i + 1; k++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	
	public void practice12() {
		
		System.out.print("정수 입력 : ");
		int num = sc.nextInt();
		
		for (int i = 1; i <= num; i++) {
            System.out.print("*");
        }
        System.out.println();

        for (int i = 1; i <= num - 2; i++) {
            System.out.print("*");
            for (int j = 1; j <= num - 2; j++) {
                System.out.print(" ");
            }
            System.out.println("*");
        }

        for (int i = 1; i <= num; i++) {
            System.out.print("*");
        }
		
	}
	
	public void practice13() {
		
		System.out.print("자연수 하나를 입력하세요 : ");
		int num = sc.nextInt();
		int count = 0;
		
		for (int i = 1; i <= num; i++) {
			if (i % 2 == 0 || i % 3 == 0) {
			System.out.print( i + " " );
			} 
			if (i % 2 == 0 && i % 3 == 0) {
				count++;
			}
			
		}
		System.out.printf("\ncount : " + count);
	}
	
}
practice11
정수 입력 : 5
    *
   ***
  *****
 *******
*********

While문

public class WhileExample {

	Scanner sc = new Scanner(System.in);
	
	/* while문
	 * - 별도의 초기식, 증감식이 존재하지 않고
	 * 	 반복 종료 조건을 자유롭게 설정하는 반복문.
	 *   
	 * 
	 *   ** 확실히 언제 반복이 끝날지는 모르지만
	 *      언젠가 반복 조건이 flase가 되는 경우 반복을 종료함.
	 *      
	 *      
	 *  [작성법]
	 *  while( 조건식 ) {
	 *  
	 *  	조건식이 true 일 때 반복 수행할 구문
	 *  }
	 *  
	 */
	
	
	public void ex1() {
		
		int input = 0;
		
		while( input != 9 ) {
			// input에 저장된 값이 9가 아닌 경우 반복
			
			System.out.println("----메뉴선택---- \n1. 떡볶이 \n2. 쫄면 \n3. 김밥 \n9. 종료");
			
			System.out.print("메뉴선택 >>");
			input = sc.nextInt();
			
			switch(input) {
			case 1 : System.out.println("떡볶이를 주문했습니다."); break;
			case 2 : System.out.println("쫄면을 주문했습니다."); break;
			case 3 : System.out.println("김밥을 주문했습니다."); break;
			case 9 : System.out.println("메뉴선택을 종료합니다."); break;
			default : System.out.println("잘못 입력하셨습니다.");
			}
			
		}
		
	}
	
	
	public void ex2() {
		// 입력되는 모든 정수의 합 구하기
		// 단, 0이 입력되면 반복 종료 후 결과 출력
		// -> 0이 입력되지 않으면 계속 반복
		
		int input = -1; // 입력받은 값을 저장할 변수
		
		int sum = 0; // 모든 정수의 합을 저장하는 변수
		
		while ( input != 0) {
			
			System.out.print("정수 입력 : ");
			input = sc.nextInt();
			
			sum += input; // 입력받은 값을 sum에 누적
			
		}	
			
		System.out.println("합계 : " + sum);
	}
	
	
	public void ex3() {
		// 입력되는 모든 정수의 합 구하기
		// 단, 0이 입력되면 반복 종료 후 결과 출력
		// -> 0이 입력되지 않으면 계속 반복
		
		int input = 0; // 입력받은 값을 저장할 변수
		
		int sum = 0; // 모든 정수의 합을 저장하는 변수
		
		// while 문을 최소 한번은 수행하는 반복문
		// -> do ~ while 문
		
		do {
			System.out.print("정수 입력 : ");
			input = sc.nextInt();
			
			sum += input;
		} while (input != 0);
		
		System.out.println("합계 : " + sum);
		
	}
	
}

BranchExample

public class BranchExample {
	
	Scanner sc = new Scanner(System.in);
	
	public void ex1() {
		
		// 1부터 10까지 1씩 증가하며 출력하는 반복문 작성
		// 단, 5를 출력하면 반복문 종료
		
		for(int i = 1; i <= 10; i++) {
			System.out.print(i + " ");
			
			if ( i == 5 ) {
				break;
			}
		}
		
	}
	
	
	public void ex2() {
		// 0이 입력될 때까지의 모든 정수의 합 구하기
		
		int input = 0;
		int sum = 0;
		
		// while문을 처음에 무조건 수행하고, 특정 조건에 종료하는 방법
		// 1) input에 초기값을 0이 아닌 다른값 while (input !=0)
		
		// 2) do ~ while 문 사용
		
		// 3) 무한 루프 상태의 while문을 만들고 
		// 	  내부에 break 조건 작성
		
		while(true) { // 무한 루프
			
			System.out.print("정수 입력 : ");
			input = sc.nextInt(); // 입력
			
			if(input == 0) {
				break;
			}
			
			sum += input; // 위치 문제마다 잘 생각할 것.
			
		}
		
		System.out.println("합계 : " + sum);
		
	}
	
	
	public void ex3() {
		
		// 입력받은 모든 문자열을 누적
		// 단, "exit@" 입력시 문자열 누적을 종료하고 결과 출력
		
		String str = ""; // 빈 문자열
						 // 쌍따옴표("")라는 기호를 이용해 String 리터럴임을 지정
						 // 하지만 내용은 없음.
						 // String str = null; 과 다르다
		
		while(true) {
			
			System.out.print("문자열 입력(exit@ 입력 시 종료) : ");
			
			String input = sc.nextLine();
			// next() : 다음 한 단어 (띄어쓰기 포함 X)
			// nextLine() : 다음 한 줄 (띄어쓰기 포함 O)
			
			/* if(input == "exit@") {
			 * 	break;
			 * } 
			 * -> 틀림 (==는 기본 자료형 전용)
			 */
			
			if(input.equals("exit@")) {
				// String 자료형은 비교 연산자(==)로 같은 문자열인지 판별할 수 없다.
				
				// 비교 연산자는 보통 기본 자료형끼리의 연산에서만 사용 가능하다.
				// -> String 은 기본 자료형이 아닌 참조형
				
				// ** 해결방법 : 문자열1.equals(문자열2) 으로 비교 가능 **
				
				break;
				
			}
			
			str += input + "\n";
			
		}
		
		System.out.println("==================================");
		System.out.println(str);
		
	}
	
	
	public void ex4() {
		
		// 중첩 반복문 내부에서 break 사용하기
		// 구구단 2~9단
		// 단, n단은 *n까지만 출력
		
		for(int dan = 2; dan <= 9; dan++) {
			
			for(int num = 1; num <= 9; num++) {
				
			System.out.printf("%d X %d = %2d  ", dan, num, dan * num); 
			if ( num == dan ) {
				break;
			}
			
		}
		
		System.out.println();
		
		}

	}
	
	// ** continue **
	public void ex5() {
		
		// break : 반복문을 바로 멈춤
		// continue : 다음 반복으로 넘어감
		
		// 1 ~ 10 까지 1씩 증가하며 출력
		// 단, 3의 배수 제외
		
		for (int i = 1; i <= 10; i++) {
			if (i % 3 == 0) {
			continue;
		} 
			
			System.out.print(i + " ");
		
		}
		
	}
	
	
	public void ex6() {
		// 1 ~ 100까지 1씩 증가하며 출력하는 반복문
		// 단, 5의 배수는 건너뛰고
		// 증가하는 값이 40이 되었을 때 반복을 멈춤
		
		// 1
		// 2
		// 3
		// ..
		// 39
		
		for(int i = 1; i <= 100; i++) {
			
			if (i % 5 == 0) {
				continue;
			}
			System.out.println(i);
			
			if (i == 39) {
				break;
		 	}
			
		}
		
	}
	
	
	public void RSPGame() {
		
		System.out.println("[가위 바위 보 게임~!!]");
		System.out.print("몇 판 ? : ");
		int round = sc.nextInt();
		
		// 승패 기록용 변수 
		int win = 0;
		int draw = 0;
		int lose = 0;
		
		for (int i = 1; i <= round; i++) { // 입력 받은 판 수 만큼 반복
			
			System.out.println("\n" + i + "번째 게임");
			
			System.out.println("가위/바위/보 중 하나를 입력 해주세요 : ");
			
			String input = sc.next();
			
			// Math.random();
			// 난수 생성 -> 0.0 이상 1.0 미만의 난수 생성
			
			// 1) 1~3사이 난수 생성
			// 2) 1이면 가위, 2이면 바위, 3이면 보 (switch)
			
			int random = (int)(Math.random() * 3 + 1); 
			// 0.0 <= x < 1.0
			// 0.0 <= x * 3 < 3.0
			// 1 <= x * 3 < 4.0
			// 1 <= (int)(x*3+1) <4
			// == 1 이상 4 미만 정수 --> 1 2 3
			
			String com = null; // 컴퓨터가 선택한 가위/바위/보를 저장하는 변수
			// null : 아무것도 참조하고 있지 않음. (com값 초기화 하기위해 사용)
			
			switch(random) {
			case 1 : com = "가위"; break;
			case 2 : com = "바위"; break;
			case 3 : com = "보"; break;
			} // 컴퓨터가 잘못 낼 일은 없기 때문에 default 필요없다.
			
			// 컴퓨터는 [바위]를 선택했습니다.
			System.out.printf("컴퓨터는 [%s]를 선택했습니다.", com);
			
			// 컴퓨터와 플레이어 가위 바위 보 판별
			
			if( input.equals(com) ) {
				System.out.println("비겼습니다.");
				draw++;
			} else {
				
				boolean win1 = input.equals("가위") && com.equals("보");
				boolean win2 = input.equals("바위") && com.equals("가위");
				boolean win3 = input.equals("보") && com.equals("바위");
				
				if(win1 || win2 || win3) {
					System.out.println("플레이어 승!");
					win++;
				} else {
					System.out.println("졌습니다 ㅜㅜ");
					lose++;
				}
				
			}
			
		System.out.printf("현재 기록 : %d승 %d무 %d패\n", win, draw, lose);
		
		}
		
		
		
	}
	
	
}
profile
초보자

0개의 댓글