Selection Sort(선택정렬)

//Arrays.sort(arr):배열 arr을 정렬한다
		
		//기준데이터는 0부터 끝에서 두번째까지
		for(int i=0;i<arr.length-1;i++)
		{
			//비교하는 데이터는 기준 다음값부터 끝까지
			for(int j=i+1;j<arr.length;j++)
			{
				if(arr[i]>arr[j])
				{
					int temp=arr[i];
					arr[i]=arr[j];
					arr[j]=temp;
				}
			}
		}
			//출력
			for(int i=0;i<arr.length;i++)
				{
					System.out.print(arr[i]+" ");
				}
  • 오름차순 정렬(비교하여 가장 작은 수를 앞으로 보냄)
  • 위의 코드는 Array.sort(배열명); 으로 축약가능
		for(int i=0;i<arr.length/2;i++)
		{
			int temp=arr[i];
			arr[i]=arr[arr.length-1-i]; //10개일때 0하고 9번이랑 바꾸는것
			arr[arr.length-1-i]=temp;
		}
  • 데이터 순서 거꾸로 변경하기

중복처리(Lotto)

int [] lotto=new int[6];
		
		for(int i=0;i<lotto.length;i++)
		{
			//1~45까지의 랜덤수 발생
			lotto[i]=(int)(Math.random()*45)+1;
			
			//중복처리
			for(int j=0;j<i;j++)
			{
				if(lotto[i]==lotto[j])
				{
					i--; //같은번지에 다시값을 구하기위해서
					break; //i++로 이동
				}
			}
		}

Arrays.sort(lotto);

//출력
		for(int i=0;i<lotto.length;i++)
		{
			System.out.printf("%5d",lotto[i]);
		}
  • 중복처리와 오름차순 정렬 사용
Scanner sc=new Scanner(System.in);
		int guip; //몇장,얼마
		int [] lotto=new int[6];
		
		System.out.println("로또 얼마 구입할지를 입력해주세요");
		guip=sc.nextInt();
		
		//예외조항
		if(guip<1000)
		{
			System.out.println("***구입금액이 부족합니다***");
			return; //메인함수 빠져나간다
		}
		
		for(int n=0;n<guip/1000;n++) {
			
			System.out.printf("%d회: ",n+1);
		
		for(int i=0;i<lotto.length;i++)
		{
			//1~45까지의 랜덤수 발생
			lotto[i]=(int)(Math.random()*45)+1;
			
			//중복처리
			for(int j=0;j<i;j++)
			{
				if(lotto[i]==lotto[j])
				{
					i--; //같은번지에 다시값을 구하기위해서
					break; //i++로 이동
				}
			}
		}
		
		//Arrays.sort(lotto);
		//오름차순정렬(기준:처음~끝에서2번째    비교:시작다음값~끝)
		for(int i=0;i<lotto.length-1;i++)
		{
			for(int j=i+1;j<lotto.length;j++)
			{
				if(lotto[i]>lotto[j])
				{
					int temp=lotto[i];
					lotto[i]=lotto[j];
					lotto[j]=temp;
				}
			}
		}
		
		//출력
		for(int i=0;i<lotto.length;i++)
		{
			System.out.printf("%5d",lotto[i]);
		}
		System.out.println();
		} //첫번쨰 for문 끝
  • 구입 금액에 따라 n번의 임의 로또 번호 생성(위의 코드 전체를 for문으로 감쌈)

다차원배열

int [][] arr;
		arr=new int[2][3]; //2행 3열로 할당(row,column)
		
		//초기값
		arr[0][0]=10;
		arr[0][1]=20;
		arr[0][2]=30;
		
		arr[1][0]=5;
		arr[1][1]=10;
		arr[1][2]=20;
System.out.println("행의갯수: "+arr.length);
		
		//열의갯수
		System.out.println("0행의 열갯수: "+arr[0].length);
		System.out.println("1행의 열갯수: "+arr[1].length);
  • 배열의 대표 길이(arr.length)는 행의 갯수 표현, 열의 갯수는 각 행의 길이(arr[i].length)로 계산
		for(int i=0;i<arr.length;i++) //행
		{
			for(int j=0;j<arr[i].length;j++) //열
			{
				//System.out.print(arr[i][j]+"\t");
				System.out.printf("%d,%d=%2d\t",i,j,arr[i][j]);
			}
			System.out.println();
		}
  • 출력 시 이중 for문 사용하며, 마지막에 줄 바꿈 해주어 행을 구분
  • 각 행의 열 갯수가 다른 경우
int [][] arr= {
				{22,33},
				{11,22,33},
				{10,20,30,40}
				};
  • { }을 중첩하여 다차원배열 선언과 동시에 초기값 지정가능
System.out.println("총행갯수: "+arr.length); //3
		System.out.println("0번행의 열갯수: "+arr[0].length); //2
		System.out.println("1번행의 열갯수: "+arr[1].length); //3
		System.out.println("2번행의 열갯수: "+arr[2].length); //4
  • 각 행마다 열 갯수가 다르게 선언
for(int i=0;i<arr.length;i++)//행
		{
			for(int j=0;j<arr[i].length;j++)//열
			{
				System.out.printf("[%d],[%d]=%d\t",i,j,arr[i][j]);
			}
			System.out.println();
		}
  • 출력은 위와 같이 이중 for문 사용

Bingo(이중배열)

Scanner sc=new Scanner(System.in);
		
		//3행3열 배열 생성
		int [][] pz=new int[3][3];
		
		int bingo=0;
		
		while(true)
		{
			System.out.println("***같은숫자나오면 빙고!!!***");
			
			//3행3열안에 1~3까지의 난수발생
			for(int i=0;i<pz.length;i++)//행
			{
				for(int j=0;j<pz[i].length;j++)//열
				{
					pz[i][j]=(int)(Math.random()*3)+1;
				}
			}
			
			//출력
			for(int i=0;i<pz.length;i++)//행
			{
				for(int j=0;j<pz[i].length;j++)//열
				{
					System.out.printf("%4d",pz[i][j]);
				}
				System.out.println();
			}
			
			//빙고갯수
			
			bingo=0;
			//가로방향 3개 세로방향 3개
			for(int i=0;i<pz.length;i++)
			{
				//가로방향비교
				if(pz[i][0]==pz[i][1]&&pz[i][1]==pz[i][2])
					bingo++;
				
				//세로방향비교
				if(pz[0][i]==pz[1][i]&&pz[1][i]==pz[2][i])
					bingo++;
			}
			//대각선 \방향
			if(pz[0][0]==pz[1][1]&&pz[1][1]==pz[2][2])
				bingo++;
			
			//대각선 /방향
			if(pz[2][0]==pz[1][1]&&pz[1][1]==pz[0][2])
				bingo++;
			
			//빙고출력
			if(bingo==0)
				System.out.println("\t꽝!!!");
			else
				System.out.println("\t빙고 "+bingo+"개");
			
			//게임종료
			System.out.println("엔터를 누르면 다음난수가 나옵니다(q: 종료)");
			String ans=sc.nextLine();
			
			if(ans.equalsIgnoreCase("q"))
			{
				System.out.println("게임을 종료합니다");
				break;				
			}
		}
  • arrange가 지정되지 않았으므로 while(true)문 사용
//3행3열안에 1~3까지의 난수발생
			for(int i=0;i<pz.length;i++)//행
			{
				for(int j=0;j<pz[i].length;j++)//열
				{
					pz[i][j]=(int)(Math.random()*3)+1;
				}
			}
			
			//출력
			for(int i=0;i<pz.length;i++)//행
			{
				for(int j=0;j<pz[i].length;j++)//열
				{
					System.out.printf("%4d",pz[i][j]);
				}
				System.out.println();
			}
  • 빙고 확률을 높이기 위해 1~3의 난수만 발생
			bingo=0;
			//가로방향 3개 세로방향 3개
			for(int i=0;i<pz.length;i++)
			{
				//가로방향비교
				if(pz[i][0]==pz[i][1]&&pz[i][1]==pz[i][2])
					bingo++;
				
				//세로방향비교
				if(pz[0][i]==pz[1][i]&&pz[1][i]==pz[2][i])
					bingo++;
			}
			//대각선 \방향
			if(pz[0][0]==pz[1][1]&&pz[1][1]==pz[2][2])
				bingo++;
			
			//대각선 /방향
			if(pz[2][0]==pz[1][1]&&pz[1][1]==pz[0][2])
				bingo++;
			
			//빙고출력
			if(bingo==0)
				System.out.println("\t꽝!!!");
			else
				System.out.println("\t빙고 "+bingo+"개");
  • 빙고 갯수를 변수 bingo로 주어 빙고 달성 시마다 1개씩 증가(다시 실행 시 초기화 위해 처음 bingo=0; 으로 초기화
			System.out.println("엔터를 누르면 다음난수가 나옵니다(q: 종료)");
			String ans=sc.nextLine();
			
			if(ans.equalsIgnoreCase("q"))
			{
				System.out.println("게임을 종료합니다");
				break;				
			}
  • while(true)문이므로 break; 조건 반드시 필요
profile
초보개발자

0개의 댓글