코드일기장

배열 요소의 최댓값, 배열 요소 역순, 두 배열의 비교, 기수변환 본문

컴퓨터 과학/자료구조

배열 요소의 최댓값, 배열 요소 역순, 두 배열의 비교, 기수변환

won_hyeok2 2022. 1. 15. 20:21

 

 


배열 요소의 최댓값


 

 

어느 배열에 요소중 제일 큰 값을 찾는 알고리즘에 대해 알아보자

 

🔑 코드

더보기
import java.util.Scanner;
public class Hello {
	static int N=0;
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		do {
			System.out.print("요솟수: ");
			N=sc.nextInt();
		}while(N<=0||N==1);
		int[] arr=new int[N];
		Compare  c=new Compare(arr);
		
	}
}

class Compare{
	Scanner sc=new Scanner(System.in);
	int tmp;
	
	Compare() {}
	Compare(int[] arr){
		for(int i=0;i<arr.length;i++) {
			System.out.print("arr["+i+"]= ");
			arr[i]=sc.nextInt();
		}
		System.out.println("===========================");
		System.out.println("arr배열의 최대값은:"+checked(arr));
	}
	
	int checked(int[] a) {
		tmp=a[0];
		for(int i=1;i<a.length;i++) {
			if(tmp<a[i])
				tmp=a[i];
		}
		return tmp;
	}
}

 

 

 

요솟수: 5
arr[0]= 1
arr[1]= -50
arr[2]= 982
arr[3]= 2022
arr[4]= 15
===========================
arr배열의 최대값은:2022

출력 결과

 

 

 


 


배열 요소 역순 


 

 

어느 배열의 요소들을 역순으로 다시 정렬시켜보자.

 

🔑 코드

더보기
import java.util.Scanner;
public class Hello {
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int N=0;
		do {
			System.out.print("요솟수: ");
			N=sc.nextInt();
		}while(N<=0||N==1);

		int[] arr=new int[N];
		for(int i=0;i<arr.length;i++) {
			System.out.print("arr["+i+"]: ");
			arr[i]=sc.nextInt();
		}
		
		Reserve r=new Reserve(arr);
		System.out.println("역순 정렬 마침");
		r.callArray(arr);
	}
}


class Reserve{
	Reserve(){}
	Reserve(int[] a){
		for(int i=0; i<a.length/2; i++) {
			reserve2(a, i, a.length-i-1);
		}
	}
	
	
	void reserve2(int[] a,int b,int c) {
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
		System.out.println();
		int tmp=a[b]; 
		a[b]=a[c]; 
		a[c]=tmp;
		System.out.println("a["+b+"]와 a["+c+"]를 교환했습니다.");
	}
	
	void callArray(int[] a) {
		for(int i=0; i<a.length; i++) {
			System.out.println("arr["+i+"]= "+a[i]);
		}
	}
}

 

요솟수: 5
arr[0]: 1
arr[1]: 2
arr[2]: 3
arr[3]: 4
arr[4]: 5
1 2 3 4 5 
a[0]와 a[4]를 교환했습니다.
5 2 3 4 1 
a[1]와 a[3]를 교환했습니다.
역순 정렬 마침
arr[0]= 5
arr[1]= 4
arr[2]= 3
arr[3]= 2
arr[4]= 1

출력 결과

쓸 대 없이 코드가 길지만 최대한 클래스와 중복되는 코드를 줄여보았다.

 

 

 

 

 

 


 

 


배열 비교 


 

두 개 이상의 배열을 비교해 배열의 요소가 다 같은지 확인하는 프로그램

 

 

🔑 코드

더보기
public class Hello {
	static Scanner sc=new Scanner(System.in);
	public static void main(String[] args) {
		byte b;
		
		do {
		Compare c=new Compare();
		System.out.print("A배열의 요솟수: ");
		int N1=sc.nextInt();
		int[] A=new int[N1];
		c.method(A,"A");
		System.out.print("B배열의 요솟수: ");
		int N2=sc.nextInt();
		int[] B=new int[N2];
		c.method(B,"B");
		System.out.println("A배열과 B배열은"+(c.compare(A,B)?"같습니다":"다릅니다"));
		System.out.print("다시하겠습니까? (예: 1 아니요: 2)");
		b=sc.nextByte();
		}while(b==1);
		System.out.print("시스템 종료");
		
	}
}

class Compare{
	static Scanner sc=new Scanner(System.in);
	void method(int[] a,String str) {
			for(int i=0;i<a.length;i++) {
				System.out.print(str+"["+i+"]= ");
				a[i]=sc.nextInt();
			}	
	}
	
	boolean compare(int[] a, int[] b){
		if(a.length!=b.length) {
			return false;
		}
		for(int i=0;i<a.length;i++) {
			if(a[i]!=b[i])
				return  false;		
		}
		return true;
	}
	
}

 

A배열의 요솟수: 2
A[0]= 1
A[1]= 2
B배열의 요솟수: 2
B[0]= 1
B[1]= 2
A배열과 B배열은같습니다
다시하겠습니까? (예: 1 아니요: 2)2
시스템 종료

 

A배열의 요솟수: 2
A[0]= 2
A[1]= 1
B배열의 요솟수: 2
B[0]= 1
B[1]= 2
A배열과 B배열은다릅니다
다시하겠습니까? (예: 1 아니요: 2)1
A배열의 요솟수:

 

 

 


 


기수변환


 

 

음이아닌 정수를 2~36진수로 변환하는 프로그램

 

🔑 코드

더보기
public class Hello {
	public static void main(String[] args) {
		Rv r=new Rv();
		int number; int numberset; char[] c=new char[32];
		number=r.numberInput();
		numberset=r.numbersetInput();
	
		int numberlength=r.Rv(number,numberset,c); //진수교환
		
		System.out.print("구하려는 "+numberset+"진수의 값은=");
		for(int i=numberlength;i>=0;i--) {
			System.out.print(c[i]);
		}
	}

}

class Rv{
	static Scanner sc=new Scanner(System.in);
	int Rv(int x,int y,char[] c){
		int digit=0;
		String str="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		do {
			c[digit++]=str.charAt(x%y);
			x/=y;
		}while(x!=0);
		return digit;
	}
	
	int numberInput() {
		int num;
		do {
			System.out.print("음이 아닌 정수를 입력하세요: ");
			num=sc.nextInt();
		}while(num<0);
		return num;
	}
	
	int numbersetInput() {
		int num;
		do {
			System.out.print("바꿀려는 진수를 입력하세요 (2~36):  ");
			num=sc.nextInt();
		}while(num<2||num>36);
		return num;
	}
}

 

 

 

 

 

 

 

Comments