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;
공유하기
Twitter Google+ LinkedIn
댓글남기기