알고리즘

자료구조와 함께 배우는 알고리즘 입문[자바] - 2일차

zumsim 2022. 11. 10. 14:46
728x90
반응형

02. 기본 자료구조

 

연습문제 Q1

static int maxOf(int[] a) {
      int max = a[0];

      for(int i=0; i<a.length; i++) {
           if(a[i] > max) {
                max = a[i];
           }
      }
      return max;
}

public static void main(String[] args) {
       Random rd = new Random();

       int num = rd.nextInt(11)+1;

       int [] height = new int[num];

       for(int i=0; i<num; i++) {
              height[i] = 100+rd.nextInt(90);
       }

       System.out.println("max값은 "+maxOf(height)+"입니다.");
}

 

 

연습문제 Q2

static void swap(int[] a, int idx1, int idx2) {
      System.out.println(Arrays.toString(a));
      System.out.println("a["+idx1+"]과(와) a["+idx2+"]를 교환합니다.");
      int num = a[idx2];
      a[idx2] = a[idx1];
      a[idx1] = num;
}

 

static void reverse(int[] a) {
      for(int i=0; i<a.length/2; i++) {
           swap(a, i, a.length-i-1);
      }
}

 

public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);

     System.out.print("배열 크기 :::: ");

     int num = sc.nextInt();

 

    int[] a= new int[num];

 

    for(int i=0; i<num; i++) {

          System.out.print("a["+i+"] ::: ");

          a[i] = sc.nextInt();

    }

   

    reverse(a);

    System.out.println(Arrays.toString(a));
    System.out.println("역순 정렬을 마쳤습니다.");

}

 

 

연습문제 Q3

static int sumOf(int[] a) {
     int sum = 0;
     for(int i=0; i<a.length; i++) {
          sum += a[i];
     }
     return sum;
}

 

public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);

     System.out.print("배열 크기 :::: ");

     int num = sc.nextInt();

 

    int[] a= new int[num];

 

    for(int i=0; i<num; i++) {

          System.out.print("a["+i+"] ::: ");

          a[i] = sc.nextInt();

    }

    System.out.println("배열의 총 합은 ::: "+sumOf(a)+"입니다.");

}

 

 

연습문제 Q4

static void copy(int[] a, int[] b) {
      for(int i=0; i<a.length; i++) {
            a[i] = b[i];
      }
// a = b.clone();
}

 

public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);

     System.out.print("첫 번째 배열의 크기 :::: ");

     int num = sc.nextInt();

 

    int[] a= new int[num];

 

    for(int i=0; i<num; i++) {

          System.out.print("a["+i+"] ::: ");

          a[i] = sc.nextInt();

    }

    

     System.out.print("두 번째 배열의 크기 :::: ");

     num = sc.nextInt();

 

     int[] b= new int[num];

     for(int i=0; i<num; i++) {

          System.out.print("a["+i+"] ::: ");

          a[i] = sc.nextInt();

     }

 

    copy(a, b);

    System.out.println("첫 번째 배열 ::: "+Arrays.toString(a));
    System.out.println("두 번째 배열 ::: "+Arrays.toString(b));

}

 

 

연습문제 Q5

static void reverse(int[] a) {
     for(int i=0; i<a.length/2; i++) {
         swap(a, i, a.length-i-1);
     }
}

static void copy(int[] a, int[] b) {
      for(int i=0; i
            a[i] = b[i];
      }
// a = b.clone();
}

static void rcopy(int[] a, int[] b) {
    for(int i=0; i<a.length; i++) {
        a[i] = b[b.length-i-1];
    }
}

 

public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);

     System.out.print("첫 번째 배열의 크기 :::: ");

     int num = sc.nextInt();

 

    int[] a= new int[num];

 

    for(int i=0; i<num; i++) {

          System.out.print("a["+i+"] ::: ");

          a[i] = sc.nextInt();

    }

    

     System.out.print("두 번째 배열의 크기 :::: ");

     num = sc.nextInt();

 

     int[] b= new int[num];

     for(int i=0; i<num; i++) {

          System.out.print("a["+i+"] ::: ");

          a[i] = sc.nextInt();

     }

 

    rcopy(a, b);

    System.out.println("첫 번째 배열 ::: "+Arrays.toString(a));
    System.out.println("두 번째 배열 ::: "+Arrays.toString(b));

}

 

연습문제 Q6

static int cardConv(int x, int r, char[] d) {
      int digits = 0;
      String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

      do {
            d[digits++] = dchar.charAt(x % r);
            x /= r;
      }while(x != 0);

      for (int i = 0; i < digits / 2; i++) {
            char num = d[digits-i-1];
            d[digits-i-1] = d[i];
            d[i] = num;
      }
      return digits;
}

 

public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      char[] arr = new char[32];

      int num;
      int retry;
      int no;
      int idx;

      System.out.println("10진수를 기수 변환합니다.");

      do {
          do {

               System.out.print("변환하는 음이 아닌 정수 ::: ");

               num = sc.nextInt();

          }while(num < 0);

         

          do {

              System.out.print("어떤 진수로 변환할까요? (2~36) ::: ");

              no = sc.nextInt();

           }while(no < 2 || no > 36);

 

          idx = cardConvR(num, no, arr);

          System.out.print(no+"진수로는 ");

          for(int i=idx-1; i>=0; i--) {
               System.out.print(arr[i]);
          }

          System.out.println("입니다.");

          

          System.out.print("한 번 더 할까요? (1. 예/0.아니오) ::: ");

          retry = sc.nextInt();

      }while(retry == 1);

}

 

 

연습문제 Q7

static int cardConvR(int x, int r, char[] d) {
int digits = 0;
String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

System.out.println(r+" |          "+x);
do {
System.out.println("  + ------------");
if((x/r) == 0) {
System.out.println("             "+(x/r)+"  -- "+(x%r));
}else{
System.out.println(r+" |          "+(x/r)+"  -- "+(x%r));
}

d[digits++] = dchar.charAt(x % r);
x /= r;
}while(x != 0);

return digits;

}

 

public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      char[] arr = new char[32];

      int num;
      int retry;
      int no;
      int idx;

      System.out.println("10진수를 기수 변환합니다.");

      do {
          do {

               System.out.print("변환하는 음이 아닌 정수 ::: ");

               num = sc.nextInt();

          }while(num < 0);

         

          do {

              System.out.print("어떤 진수로 변환할까요? (2~36) ::: ");

              no = sc.nextInt();

           }while(no < 2 || no > 36);

 

          idx = cardConvR(num, no, arr);

          System.out.print(no+"진수로는 ");

          for(int i=idx-1; i>=0; i--) {
               System.out.print(arr[i]);
          }

          System.out.println("입니다.");

          

          System.out.print("한 번 더 할까요? (1. 예/0.아니오) ::: ");

          retry = sc.nextInt();

      }while(retry == 1);

}

728x90
반응형