Doit 알고리즘

업데이트:

두 배열의 비교

  • 실습

두 배열의 모든 요소의 값이 같은지 판단하기.

package doit.algorism.practice;

import java.util.Scanner;

public class chap02 { 

	static boolean equals(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;
	}
	
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("배열 a의 요소수 : ");
		int na = sc.nextInt();
		
		int[] a = new int[na];
		
		for(int i=0; i<a.length;i++) {
			System.out.print("a["+i+"] :");
			a[i] = sc.nextInt();
		}
		
		System.out.print("배열 b의 요소수 : ");
		int nb = sc.nextInt();
		
		int[] b = new int[nb];
		
		for(int i=0; i<b.length; i++) {
			System.out.print("b["+i+"] : ");
			b[i] = sc.nextInt();
		}
		
		System.out.println("배열 a와 b는 " + (equals(a,b)? "같습니다.":"같지 않습니다."));
	}
}



연습문제

  • 배열 b의 모든 요소를 배열 a에 복사하는 메서드 copy 작성
package doit.algorism.practice;

import java.util.Scanner;

public class chap02 { 

	static void copy(int[] a, int[] b) {
		
		int num = (a.length<=b.length?a.length:b.length); 
		
		for(int i=0; i<num;i++) {
			a[i] = b[i];
		}
	}
	
	public static void main(String args[]) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("a의 요소수 : ");
		int na = sc.nextInt();
		int[] a = new int[na];
		for(int i=0; i<a.length; i++) {
			System.out.print("a["+i+"]:");
			a[i] = sc.nextInt();
		}
		
		System.out.print("b의 요소수 : ");
		int nb = sc.nextInt();
		int[] b = new int[nb];
		
		for(int i=0; i<b.length; i++) {
			System.out.print("b["+i+"] : ");
			b[i] = sc.nextInt();
		}
		
		copy(a,b);
		
		for(int i=0; i<a.length; i++) {
			System.out.print("a["+i+"]:" + a[i]);
		}
	}
}



  • 배열 b의 모든 요소를 배열 a에 역순으로 복사하는 메서드 rcopy를 작성
package doit.algorism.practice;

import java.util.Scanner;

public class chap02 { 

	static void rcopy(int[] a, int[] b) {
		
		int num = (a.length<=b.length?a.length:b.length);
		
		for(int i=0; i<num; i++) {
			a[i] = b[b.length-1-i];
		}
	}
	
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("a의 요소수 :");
		int na = sc.nextInt();
		int[] a = new int[na];
		
		for(int i=0; i<a.length; i++) {
			System.out.print("a["+i+"] :");
			a[i] = sc.nextInt();
		}
		
		System.out.print("b의 요소수 :");
		int nb = sc.nextInt();
		int[] b = new int[nb];
		for(int i=0; i<b.length; i++) {
			System.out.print("b["+i+"] :");
			b[i]=sc.nextInt();
		}
		
		rcopy(a,b);
		
		for(int i=0;i<a.length; i++) {
			System.out.print(a[i]);
		}
	}
}



기수 변환

10진수 정수를 n진수 정수로 변환하려면 정수를 n으로 나눈 나머지를 구하는 동시에
그 몫에 대해 나눗셈을 반복해야 한다.
이런 과정으로 구한 나머지를 거꾸로 늘어놓은 숫자가 기수로 변환한 숫자이다.


  • 16진수

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
0~F는 10진수 0~15에 해당한다.(A~F는 소문자라도 관계 없다.)
1의 자리 : 0부터 F까지를 나타낸다.
2의 자리 : 10부터 FF까지를 나타낸다.
3의 자리 : 100부터 FFF까지를 나타낸다.
1자리 숫자를 모두 사용하면 10이 되고, 2자리 숫자를 모두 사용하면 100이 된다.


  • 10진수

0 1 2 3 4 5 6 7 8 9
1의 자리 : 0부터 9까지의 수를 나타낸다.
2의 자리 : 10부터 99까지의 수를 나타낸다.
3의 자리 : 100부터 999까지의 수를 나타낸다.


  • 8진수

0 1 2 3 4 5 6 7
1의 자리 : 0부터 7까지의 수를 나타낸다.
2의 자리 : 10부터 77까지의 수를 나타낸다.
3의 자리 : 100부터 777까지의 수를 나타낸다.
1의 자리 숫자를 모두 사용하면 10이 되고, 2자리 숫자를 모두 사용하면 100이 된다.


  • 기수의 의미

기수는 수를 나타내는 데 기초가 되는 수로, 10진법에서는 0에서 9까지의 정수를 말한다.
서수는 사물의 순서를 나타내는 수입니다. 기수는 일,이,삼 서수는 첫째,둘째,셋째 …


  • 정수 상수의 n진수 표현 방법

정수 상수가 0x 또는 0X로 시작되는 경우는 16진수
숫자 0으로 시작되는 경우 8진수
두 경우에 해당하지 않으면 10진수로 간주한다.
EX) 0x1C -> 10진수 28에 대한 16진수 표기 , 034 -> 10진수 26에 대한 8진수 표기


  • 실습

기수 변환

package doit.algorism.practice;


public class chap02 { 
			   // 정수값 x를 r진수로 변환하여 배열 d에 아래자리부터 넣어주고 자리수를 반환.
	static int cardConvR(int x, int r,char[] d) {

		int digits =0; // 변환 후의 자리수
		String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		
		do {
			d[digits++] = dchar.charAt(x%r); // r로 나눈 나머지를 저장
			x /= r; // r로 나눈 몫을 x에 저장
		}while(x!=0);
		
		return digits;
	}
}

x = 59, r =16 일 때
1) d[0] = dchar.charAt(11); // 11 -> B
x /=r // 3

2) d[1] = dchar.charAt(3);
x /=r // 0
x == 0 반복문 종료

3) 반복문 2번 수행 digits = 2;



댓글남기기