국비 수업 6일차

김성수·2022년 10월 18일
0
post-thumbnail

1. 함수 정리 문제 (주말 복습)


  • 만들어진 함수가 있다면 반드시 응용이 가능한지 여부를 판단한다.
  • 아래의 예시는 문자열을 매개로 하는 함수를 사용하여 정수 함수를 만드는 식을 보여준다.
  • 정수와 문자열이 만나면 문자열로 바뀐다 ( ※ 문자열을 만나는 모든 자료형이 문자열로 바뀐다를 명심한다.)

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      package day05;
       
      public class Quiz4 {
          
          static String profile(long data) {        // long을 받는 profile과
              String result = "";                    // String을 받는 profile은 서로 다른 함수이다
              long a = data / 10000000;
              long b = data % 10000000;
      //        System.out.println(a + "-" + b);
              result = profile(a + "-" + b);    // 이미 작성한 profile을 활용하여 형태만 맞춰준다
              return result;
          }
          
          static String profile(String data) {
              String result = "";
              String y = data.substring(02);
              String g = data.substring(78);
              int year = Integer.parseInt(y);
              int gender = Integer.parseInt(g);
              int currentYear = 2022;
      //        year += (year < 22) ? 2000 : 1900;
              switch(gender) {
              case 9case 0:
                  year += 1800;
                  break;
              case 1case 2:
                  year += 1900;
                  break;
              case 3case 4:
                  year += 2000;
                  break;
              }
              int age = currentYear - year + 1;
              
              String format = "%d세, %s입니다";
              result = String.format(format, age, gender % 2 == 0 ? "여성" : "남성");
              return result;
          }
          public static void main(String[] args) {
              // 주민등록번호를 전달받아서 나이와 성별을 출력하는 함수를 작성하세요
              // 인자는 정수 혹은 문자열로 전달할 수 있습니다
              // 결과는 String.format을 이용하여 나이, 성별을 문자열형식으로 반환합니다
              
              String s1 = profile(9305162345678L);    // long
              String s2 = profile("930516-2345678");    // String
              
              System.out.println(s1);    // 30세, 여성입니다
              System.out.println(s2);    // 30세, 여성입니다
              
              String s3 = profile("010203-3456789");
              String s4 = profile(1112234567890L);
              
              System.out.println(s3);
              System.out.println(s4);
          }
      }
       
      cs


      2. 여러 데이터를 묶어서 관리하는 배열에 대하여


      • 배열은 Reference Type(참조 자료형)이며, 대상을 참조하는 변수이다
      • 자바의 primitive Type(원시 타입 또는 기본형 타입이라 불린다.)을 제외한 모든 변수는 대상을 참조하는 참조형 데이터 타입이다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      public class Ex02 {
          public static void main(String[] args) {
       
              // 배열 만들기
              // 1) 배열은 Reference Type(참조 자료형)이고, 변수는 대상을 참조하는 변수이다 (본체가 아니다)
       
              int[] arr1; // 정수형 배열을 참조할 수 있는 참조변수만 선언 (실제 배열은 없음)
              int arr2[]; // C언어에서는 변수이름 뒤에 []를 작성하고 자바는 둘다 가능하지만 개발자끼리의 암묵적 규칙에 따른다
       
              int[] arr3 = { 27846 };
              // primitive type(원시 타입)이거나, 다른 변수가 만들어져 있으면 중괄호만으로 생성 가능
       
              int[] arr4 = new int[] { 1020304050 };
              // 객체의 배열을 생성하기 위해서는 위와 같이 new 자료형[] 형식으로 생성 가능
       
              int[] arr5 = new int[5];
              // 배열의 요소를 명시하지 않고, 빈칸만으로 배열을 생성할 수도 있으며, 길이가 필요함
              // 이때, 배열 멤버 요소의 초기값은 자료형에 맞는 0값으로 생성됨
       
      //        int[] arr6 = new int[5] { 1, 2, 3, 4, 5 };
              // 배열을 생성할 때는 길이 혹은 요소를 명시하며, 위와 같이 둘다 명시하게 되면 문법상 옳바르지 않다
       
              System.out.println(arr3); // 특정 객체를 참조하기 때문에, 객체의 hashcode가 출력됨
              showArray(arr3);
       
              showArray(arr5); // int의 기본값은 0 0 0 0 0 0 출력됨
       
              // 2) 배열을 가리키는 변수는 참조타입이므로, 다른 대상을 참조할 수 있다
              int[] test = { 123 }; // 배열은 참조변수 무조건 가르키기만 ![](https://velog.velcdn.com/images/deletejava/post/d94693dd-cc6e-4d9c-b42d-f25d9978450f/image.png) 한다
              showArray(test);
       
              test = arr4;
              showArray(test);
       
          }
       
          static void showArray(int[] arr) {
              String blank = " ";
              for (int i = 0; i < arr.length; i++) {
                  blank = i < arr.length - 1 ? " " : "\n";
                  System.out.print(arr[i] + blank);
              }
          }
      }
      cs


      3. 유니코드


      시간이 지나가면서 영어나 숫자 그리고 기본적인 기호뿐만 아니라 그 나라, 그 언어에서 쓰는 다양한 문자들을 처리하려면 1바이트로 정의된 아스키 코드를 확장할 필요가 있게 되는데, 유니코드는 이런 아스키코드의 한계성을 해소할 수 있는 체계로 만들어진 코드로 각 나라별 언어를 모두 표현하기 위해 나온 코드 체계가 유니코드(unicode)이다.
      유니코드는 사용중인 운영체제, 프로그램, 언어에 관계없이 문자마다 고유한 코드 값을 제공하는 새로운 개념의 코드이고, 언어와 상관없이 모든 문자를 16비트로 표현하므로 최대 65,536자까지 포현할 수 있다. 아무튼 자바는 모든 문서를 유니코드로 처리한다.



      4. Java Util Array

      • Arrays 클래스에는 배열을 다루기 위한 다양한 메소드가 포함되어 있습니다.
      • Arrays 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않고도 바로 사용할 수 있습니다.
      • 이 클래스는 java.util 패키지에 포함되므로, 반드시 import 문으로 java.util 패키지를 불러오고 나서 사용해야 합니다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      import java.util.Arrays; // 배열을 제어하기 위해 도움이 되는 함수들이 모여있는 클래스
       
      public class Ex06 {
          static void showArray(int[] arr) {
              String blank = " ";
              for (int i = 0; i < arr.length; i++) {
                  blank = i < arr.length - 1 ? " " : "\n";
                  System.out.print(arr[i] + blank);
              }
          }
       
          public static void main(String[] args) {
              int[] arr = { 27846 };
              showArray(arr);
       
              Arrays.sort(arr); // 별도의 객체를 생성하지 않아도, 정렬 함수를 호출할 수 있다(static)
              showArray(arr);
          }
      }
      cs

      ※ char[] arr = str.toCharArray();

      • String을 char[] 로 바꿔주는 함수
      • 추가로 char temp = arr[k]; 와 같은 대입연산에서 좌변과 우변의 자료형은 반드시 같아야 한다

      5. 문자열 값을 비교하여 정렬하는 방법

      compareTo 함수는 아래와 같이 사용가능하다

      "String".compareTo("Other String")


      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      public class Ex08 {
       
          static void showArray(String[] arr) {
              for (int i = 0; i < arr.length; i++) {
                  System.out.print(arr[i] + " ");
              }
              System.out.println();
          }
       
          public static void main(String[] args) {
              // 문자열 배열의 정렬
              String[] arr = { "이지은""홍진호""강호동""이병건""주호민" };
       
              showArray(arr);
              // 1) 문자열은 문자의 배열과 같다
              // 2) 문자(char)는 정수형이다 (글자의 코드를 정수로 저장한다)
              // 3) 문자열을 구성하는 첫번째 글자를 비교하여 정렬한다
              // 4) 만약, 첫번째 글자가 같으면, 그 다음 글자끼리 비교한다
       
              System.out.println("이지은".compareTo("홍진호"));
              System.out.println("이지은".compareTo("강호동"));
       
              System.out.println("===========================\n\n");
       
              // 5) 정수 두개의 값을 비교한다 n1 > n2
              // 6) 두 정수의 차가 0보다 크냐 작냐를 판별한다 n1 - n2 > 0
              // 7) s1.compareTo(s2) 는 두 문자열의 차이를 정수로 반환한다
       
              for (int i = 0; i < arr.length - 1; i++) {
       
                  for (int j = i + 1; j < arr.length; j++) {
                      if (arr[i].compareTo(arr[j]) > 0) {
                          String temp = arr[i];
                          arr[i] = arr[j];
                          arr[j] = temp;
                      }
                  }
              }
              showArray(arr);
       
          }
       
      }
      cs


      6. 배열 정렬 마무리 문제

      1. 이름을 바꾸면 나이도 같이 옮겨가도록 추가로 받을 변수를 선언해준다
      2. 용도에 알맞는 함수를 만들어 유용하게 사용할 수 있게 한다. ※ 메인함수에 다때려넣듯이 쓰지 않는다.
      3. 오름차순 내림차순을 헷갈리지 않도록 하자

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      public class Quiz {
       
          private static void show(String[] nameArray, int[] ageArray) {
              for (int i = 0; i < nameArray.length; i++) {
                  System.out.printf("%s : %d살\n", nameArray[i], ageArray[i]);
              }
              System.out.println();
          }
       
          private static void name(String[] nameArray, int[] ageArray) { // 이름을 바꾸면 나이도 바꿔줘야한다
              System.out.println("========이름 내림차순 정렬========");
              for (int i = 0; i < nameArray.length; i++) {
       
                  for (int j = i + 1; j < nameArray.length; j++) {
                      if (nameArray[i].compareTo(nameArray[j]) > 0) {
                          String temp1 = nameArray[i];
                          nameArray[i] = nameArray[j];
                          nameArray[j] = temp1;
       
                          int temp2 = ageArray[i];
                          ageArray[i] = ageArray[j];
                          ageArray[j] = temp2;
                      }
                  }
              }
              show(nameArray, ageArray);
          }
       
          private static void age(String[] nameArray, int[] ageArray) {
              System.out.println("========나이 내림차순 정렬========");
              for (int i = 0; i < ageArray.length; i++) {
                  for (int j = i + 1; j < ageArray.length; j++) {
                      if (ageArray[i] < ageArray[j]) {
                          int temp1 = ageArray[i];
                          ageArray[i] = ageArray[j];
                          ageArray[j] = temp1;
       
                          String temp2 = nameArray[i];
                          nameArray[i] = nameArray[j];
                          nameArray[j] = temp2;
                      }
                  }
              }
              show(nameArray, ageArray);
          }
       
          public static void main(String[] args) {
              String[] nameArray = { "이지은""홍진호""강호동""주호민""이병건" };
              int[] ageArray = { 3041534240 };
       
              show(nameArray, ageArray);
              // 1) 나이 순으로 내림차순 정렬 후 출력하세요
              name(nameArray, ageArray);
       
              // 2) 이름 순으로 오름차순 정렬 후 출력하세요
              age(nameArray, ageArray);
       
              // 단, 정렬에 의해서 이름과 나이가 엇갈리면 안됩니다 !!
       
          }
       
      }
      cs
profile
다들 잘하는데 나만 못해?

0개의 댓글