반응형
Q1 키뿐만 아니라 사람 수도 난수로 생성하도록 실습 2-5를 수정하여 프로그램을 작성하시오.
import java.util.Random;
public class Chap_02_q_01_tallest {
public static void main(String[] args) {
Random random = new Random();
System.out.println("키의 최댓값을 구합니다.");
System.out.print("사람 수: ");
int num = random.nextInt(10)+1;
int[] height = new int[num];
System.out.println("키 값은 아래와 같습니다.");
for(int i = 0; i < num; i++){
height[i] = 100 + random.nextInt(90);
System.out.println("height[" + i + "]: " + height[i]);
}
System.out.println("최댓값은 " + maxOf(height) + "입니다.");
}
private static int maxOf(int[] height) {
int max = height[0];
for(int i = 1; i < height.length; i++){
if(max < height[i]) max = height[i];
}
return max;
}
}
Q2 오른쪽처럼 배열 요소를 역순으로 정렬하는 과정을 하나하나 나타내는 프로그램을 작성하시오.
5, 10 73, 2, -5, 42 |
a[0]과 a[5]를 교환합니다. |
42 10, 73, 2 ,-5, 5 |
a[1]과 a[4]를 교환합니다. |
42 -5, 73, 2 ,10, 5 |
a[2]과 a[3]를 교환합니다. |
42 -5, 2, 73 ,10, 5 |
역순 정렬을 마쳤습니다. |
import java.util.Random;
public class Chap02_q2_reverse {
public static void main(String[] args) {
Random random = new Random();
int[] arr = new int[random.nextInt(10)+1];
for(int i = 0; i < arr.length; i++){
arr[i] = random.nextInt(100);
if(i!= arr.length-1) System.out.printf("%2d, ", arr[i]);
else System.out.printf("%2d", arr[i]);
}
System.out.println();
reverseSort(arr);
}
private static void reverseSort(int[] arr) {
int start = 0;
int end = arr.length-1;
do{
System.out.println("a[" + start + "]과 a[" + end + "]를 교환합니다.");
int tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
start++;
end--;
for(int i = 0; i < arr.length; i++){
if(i!= arr.length-1) System.out.printf("%2d, ", arr[i]);
else System.out.printf("%2d", arr[i]);
}
System.out.println();
}while(start < end);
System.out.println("역순 정렬을 마쳤습니다.");
}
}
Q3 배열 a의 모든 요소의 합계를 구하여 반환하는 메서드를 작성하세요.
static int sumOf(int[] a)
import java.util.Random;
public class Chap02_q3_sumOf {
public static void main(String[] args) {
Random random = new Random();
int[] arr = new int[random.nextInt(10)+1];
for(int i = 0; i < arr.length; i++){
arr[i] = random.nextInt(100);
if(i!= arr.length-1) System.out.printf("%2d, ", arr[i]);
else System.out.printf("%2d", arr[i]);
}
System.out.println();
System.out.println("총 합은 " + sumOf(arr) + "입니다.");
}
private static int sumOf(int[] arr) {
int sum = 0;
for(int num : arr){
sum += num;
}
return sum;
}
}
Q4 배열 b의 모든 요소를 배열 a에 복사하는 메서드 copy를 작성하세요.
static void copy(int [] a, int [] b)
import java.util.Arrays;
import java.util.Random;
public class Chap02_q4_copyb {
public static void main(String[] args) {
Random random = new Random();
int size = random.nextInt(10)+1;
int[] a = new int[size];
int[] b = new int[size];
for(int i = 0; i < b.length; i++){
b[i] = random.nextInt(100);
if(i!= b.length-1) System.out.printf("%2d, ", b[i]);
else System.out.printf("%2d", b[i]);
}
System.out.println();
copy(a, b);
}
private static void copy(int[] a, int[] b) {
for(int i = 0; i < b.length; i++){
a[i] = b[i];
}
System.out.println("a: " + Arrays.toString(a));
}
}
Q5 배열 b의 모든 요소를 배열 a에 역순으로 복사하는 메서드 rcopy를 작성하세요.
static void rcopy(int[] a, int[] b)
import java.util.Arrays;
import java.util.Random;
public class Chap02_q5_rcopy {
public static void main(String[] args) {
Random random = new Random();
int size = random.nextInt(10)+1;
int[] a = new int[size];
int[] b = new int[size];
for(int i = 0; i < b.length; i++){
b[i] = random.nextInt(100);
if(i!= b.length-1) System.out.printf("%2d, ", b[i]);
else System.out.printf("%2d", b[i]);
}
System.out.println();
rcopy(a, b);
}
private static void rcopy(int[] a, int[] b) {
for(int i = b.length-1; i > -1; i--){
a[b.length - (i + 1)] = b[i];
}
System.out.println("a: " + Arrays.toString(a));
}
}
Q6 배열의 앞쪽에 아랫자리가 아니라 윗자리를 넣어두는 메서드를 작성하세요.
static int cardConv(int x, int r, char[] d)
import java.util.Scanner;
public class Chap_q6_cardConv {
private final static int alphaPos = 65; // 알파벳 'A'가 시작하는 ASCII 코드 위치
private final static int numberAmount = 10; // 숫자 갯수
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int dno = 0; // 변환 후 자릿 수
int no = 0; // 변환하는 정수
int cd = 0; // 기수
int retry = 0; // 다시 한번?
char[] cno = new char[32]; // 변환 후 각 자리의 숫자를 넣어두는 문자의 배열
System.out.println("10진수를 기수 변환합니다.");
do{
clear(cno, dno);
do{
System.out.print("변환하는 음이 아닌 정수: ");
no = scanner.nextInt();
}while (no <= 0);
do {
System.out.print("어떤 진수로 변환할까요? (2~36): ");
cd = scanner.nextInt();
}while(cd < 2 || cd > 36);
dno = cardConv(no, cd, cno);
System.out.print(cd + "진수로는 ");
for(int i = 0; i <= dno ; i++){
System.out.print(cno[i]);
}
System.out.println("입니다.");
System.out.print("한 번 더 할까요? (1.예/0.아니요): ");
retry = scanner.nextInt();
}while(retry == 1);
}
private static int cardConv(int no, int cd, char[] cno) {
int dno = 0;
do{
int remain = no%cd;
if(0<= remain&& remain <= 9){
cno[dno++] = (char)(remain + '0');
}
else{
cno[dno++] = (char) (alphaPos + remain - numberAmount);
}
no /= cd;
}while (no != 0);
reverseSort(cno, dno);
return dno;
}
// 역순으로 정렬
private static void reverseSort(char[] cno, int dno) {
int start = 0;
int end = dno-1;
do{
char tmp = cno[start];
cno[start] = cno[end];
cno[end] = tmp;
start++;
end--;
}while(start < end);
}
private static void clear(char[] cno, int dno){
for(int i = 0; i < dno; i++){
cno[i] = '\u0000'; // null로 초기화
}
}
}
Q7 오른쪽처럼 기수 변환 과정을 자세히 나타내는 프로그램을 작성하세요.
import java.util.Scanner;
public class Chap_q7_cardConv_print {
private final static int alphaPos = 65; // 알파벳 'A'가 시작하는 ASCII 코드 위치
private final static int numberAmount = 10; // 숫자 갯수
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int dno = 0; // 변환 후 자릿 수
int no = 0; // 변환하는 정수
int cd = 0; // 기수
int retry = 0; // 다시 한번?
char[] cno = new char[32]; // 변환 후 각 자리의 숫자를 넣어두는 문자의 배열
System.out.println("10진수를 기수 변환합니다.");
do{
clear(cno, dno);
do{
System.out.print("변환하는 음이 아닌 정수: ");
no = scanner.nextInt();
}while (no <= 0);
do {
System.out.print("어떤 진수로 변환할까요? (2~36): ");
cd = scanner.nextInt();
}while(cd < 2 || cd > 36);
dno = cardConv(no, cd, cno);
System.out.print(cd + "진수로는 ");
for(int i = 0; i <= dno ; i++){
System.out.print(cno[i]);
}
System.out.println("입니다.");
System.out.print("한 번 더 할까요? (1.예/0.아니요): ");
retry = scanner.nextInt();
}while(retry == 1);
}
private static int cardConv(int no, int cd, char[] cno) {
int dno = 0;
do{
int remain = no%cd;
no /= cd;
if(no!=0) System.out.printf("%d|", cd);
if(0<= remain&& remain <= 9){
cno[dno++] = (char)(remain + '0');
}
else{
cno[dno++] = (char) (alphaPos + remain - numberAmount);
}
System.out.printf("\t%2d ㆍㆍㆍ %d\n", no, remain);
if(no!=0) System.out.println(" +--------------");
}while (no != 0);
reverseSort(cno, dno);
return dno;
}
// 역순으로 정렬
private static void reverseSort(char[] cno, int dno) {
int start = 0;
int end = dno-1;
do{
char tmp = cno[start];
cno[start] = cno[end];
cno[end] = tmp;
start++;
end--;
}while(start < end);
}
private static void clear(char[] cno, int dno){
for(int i = 0; i < dno; i++){
cno[i] = '\u0000'; // null로 초기화
}
}
}
'Algorithm > Do it 자료구조와 함께 배우는 알고리즘 입문' 카테고리의 다른 글
[Algorithm] 각 타입의 초깃값, 배열 복제 Java (0) | 2021.03.31 |
---|---|
[Algorithm] Chapter01 연습문제 Q12 ~ Q17 (0) | 2021.03.30 |
[Algorithm] 논리합, 논리곱, 드모르간 법칙 (0) | 2021.03.30 |
[Algorithm] Chapter01 연습문제 Q4 ~ Q5 p22 (0) | 2021.03.27 |
[Algorithm] Chapter01 연습문제 Q1 ~ Q3 (0) | 2021.03.27 |