JAVA

day04) 알고리즘-가위바위보, flag를 이용한 중복처리

code_learner 2021. 12. 27. 00:50

1. 가위바위보

가위, 바위, 보를 1, 2, 3 숫자를 대입하면

승(a) 가위(1) 바위(2) 보(3)
패(b) 보(3) 가위(1) 바위(2)

 

즉 b를 3으로 나눈 나머지 +1이 a라면(a=b%3+1)이라면 승리하게 된다.

 

public class Test01 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		Random rand = new Random();
		
		
		System.out.println("가위 바위 보: 1 2 3");
		String[] rsp= {"가위", "바위", "보"};
		
		int cnt=0;//게임 횟수 번호
		while(true) {
			System.out.print("사용자: ");
            
			/*int user=sc.nextInt();//1.숫자를 입력받을시는 상관없음
			
			if(user<1||user>3) {
				System.out.println("잘못입력하였습니다!");
				continue;
			}*/
            
			String me=sc.next();
			int user;
			if(me.equals("가위")) {//2. 문자열로 입력 받을 시 숫자로 변환
				user=1;
			}else if(me.equals("바위")) {
				user=2;
			}else {
				user=3;
			}
            
			cnt++;//유효성 검사를 마치면 횟수 증가
			int com = rand.nextInt(3)+1;
			System.out.println("사용자는 "+rsp[user-1]);
			System.out.print("컴퓨터는 "+rsp[com-1]+"->");
			if(user==com) {
				System.out.println("비겼습니다! 한번더!");
				System.out.println("=============");
			}else if(user==com%3+1) {
				System.out.println("이겼습니다!");
				break;
			}else {		
					System.out.println("졌습니다ㅜㅜ");
					System.out.println("=============");
			}
		}
			System.out.println(cnt+"만에 이겼습니다");
	}

}

 

2. 중복제거 알고리즘

boolean 타입을 이용한 flag 변수를 통해서 수행결과여부를 알 수 있다.

public class Test05 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Random rand = new Random();

		System.out.print("정수 입력: ");
		int num=sc.nextInt();

		int[] arr = new int[num];
		int num1;
		while(true) {
			System.out.print("범위입력: ");
			num1 = sc.nextInt();
			if(num1<num) {//범위가 배열 크기보다 넓어야 한다
				System.out.println("재입력하세요!");
			}else {
				break;
			}
		}
		
		int i =0;//배열 index;
		while(i<arr.length) {//언제 까지 중복될 지 모르므로 while을 사용한 풀이
			int randNum= rand.nextInt(num1)+1;
			//이 랜덤수가 이전에 생성된 적이 있다면,
			//내가 지금 넣으려고 하는 인덱스 직전까지 조사하고,
			boolean flag=false;//수행여부를 알아야 할때 자주 사용
			for (int j = 0; j < arr.length; j++) {
				if(randNum==arr[j]) {
					flag=true;//1. 중복 숫자가 있다면 
					break;
				}
			}
			if(flag) {
				continue; 2. 다시 정수 생성
			}
			arr[i]=randNum;
			i++;
		}
		
		
		for(int v: arr) {
			System.out.print(v+" ");
		}
	}
}
/*정수 입력: 5 
범위입력:  9
2 4 7 3 9 */