IT

배열 문제 풀이 2

_KH_ 2025. 1. 2. 17:46

[문제] 5개의 정수를 랜덤으로 중복없이 저장한다.

 

[한글 코딩]

		/* 5개의 정수를 랜덤으로 저장해야 하므로 random 함수
		5개의 정수들은 같은 자료형이므로 배열로 묶음 int[] datas
		* 만약 (배열 안에 없는 숫자일 경우에) {
		* 	배열 안에 저장한다 };
		* 중복없이.. 언제까지 중복이 아닐지 모르므로 while문 사용
		* 중복 거르는 로직은?
		* 랜덤 숫자를 하나 뽑을 때마다
		* for문을 통해서 배열을 순회한다. 
		* 만약 배열 안에 같은 수가 있으면
		* 다시 랜덤 숫자를 뽑는다.
		* 중복되지 않는 숫자가 나오면
		* 배열에 저장한다.
		*/

 

[코드]

     		      int[] datas=new int[5];
		      Random rand=new Random();

		      for(int i=0;i<datas.length;i++) {
		         // 5번 어쨌든 중복없이 저장해야하니까
		         while(true) {
		            datas[i]=rand.nextInt(10)+1; // 1~10
		            boolean flag=false; // 중복이 아닌 상태
		            
		            for(int j=0;j<i;j++) { // 내 앞 인덱스까지
		               if(datas[i] == datas[j]) { // 중복이니?
		                  flag=true; // 플래그 ON
		                  break;
		               }
		            }            
		            
		            if(!flag) { // 종료조건
		               break;
		            }            
		         }
		      }

		      for(int v:datas) {
		         System.out.print(v+" ");
		      }
		   }
		}

 

출력 결과

 

flag 로직을 사용하여 중복이 아닐 때만 배열에 저장되도록 한다.

flag는 중복 검사에 사용하며, boolean 형태로 true, false의 값만 얻을 수 잇다.

그러므로 중복이 아닐 때는 false로 해놓고, 중복이면 true로 설정되어 내부 반복문을 빠져나가도록 한다.

 

[flag] : 조건에 따라 true혹은 false값을 넣어주는 boolean형 변수

 

flag를 잘 몰라서 풀지 못한 문제,,,,,,,, 한 가지 또 알아간다.