• 실기_Test(2)

    2021. 7. 6.

    by. 와트

    ※문제. 프로그램 실행시 String 형태의 문자열을 스페이스 없이 main argument로 받아 들인다. 입력 받은 String 문자를 String 클래스의 메소드를 이용하여, char[]에 담고 for 루프문을 이용하여 값들을 거꾸로 출력 한다. 단, 모두 대문자로 만들어 출력 한다. 메소드를 사용하지 말고 직접 구현하여 처리한다.

    입력 예) JavaProgramming
    출력 예) GNIMMARGORPAVAJ

     

    더보기
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class CharTest {
     
        public static void main(String[] args) {
     
            String arg = args[0];        
            char[] chArr = new char[arg.length()];
            
            for(int i = 0; i < chArr.length; i++) {
                if(arg.charAt(i)>='a' && arg.charAt(i)<='z') {
                    chArr[i] = (char)(arg.charAt(i)-32);
                }
                else
                chArr[i] = arg.charAt(i);
            }
            
            for(int j = chArr.length - 1; j >= 0; j--) {
                System.out.print(chArr[j]);
            }    
        }
     
    cs

    chArr[]에 String arg를 쪼개서 하나하나 넣는 for문이랑 거꾸로 출력하는 for문을 각각 만들었다.

    toCharArray 쓰면 되는데... for문이 익숙해서 그런가 자꾸 for문으로 해결하고 끝내려고 한다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        public static void main(String[] args) {
            
            String arg = args[0];
            char[] arr = arg.toCharArray();
            String reverse = "";
            
            for(int i = arr.length - 1; i >= 0; i--) {
                if(arr[i]>='a' && arr[i]<='z'
                    arr[i] -= (char)32;
                reverse += arr[i];
            }
            System.out.println(reverse);
        }
    cs

    toCharArray 메소드를 사용하면 이렇게 더 깔끔한 코드를 만날 수 있다.

    toUpperCase쓰면 더더 깔끔하지만 문제가 메소드 사용 안하고 대문자 만들기였으니까...!

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
            String arg = args[0];
            char[] arr = arg.toCharArray();
            String reverse = "";
            
            for(int i = arr.length - 1; i >= 0; i--) {
                reverse += arr[i];
            }
            System.out.println(reverse.toUpperCase());
        }
    cs

    toUpperCase까지 쓰면 이렇게!

     

    더보기
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public static void main(String[] args) {
            
            String str = args[0];
            StringBuilder sb = new StringBuilder(str);
            sb.reverse();
            
            String result = sb.toString().toUpperCase();
            System.out.println(result);
            
        }
    cs

    StringBuilder 클래스에는 reverse메소드가 있어서 문자열을 바로 뒤집어 줄 수 있다고 한다.

    주의해야 할게 String을 StringBuilder타입으로 변환했으니까 이를 다시 String으로 변환하고 toUpperCase메소드를 사용해줘야 한다.

     

    ※문제. 10개의 정수 값(51~100 사이 난수)을 기록할 수 있는 기본 자료형 배열을 선언한다. Sequential sort(또는 selection sort) 알고리즘을 사용하여 내림차순 정렬 처리한 결과를 출력한다

    before: [93, 59, 59, 82, 62, 77, 83, 91, 83, 92]
    after: [93, 92, 91, 83, 83, 82, 77, 62, 59, 59]

     

    더보기
    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
    public class TestSort {
     
        public static void main(String[] args) {
            TestSort sort = new TestSort();
            sort.result();
        }
        
        public void result() {
            Random rnd = new Random();
            TestSort t = new TestSort();
            int[] arr = new int[10];
            for(int i = 0; i < arr.length; i++) {
                arr[i] = rnd.nextInt(10)+51;
            }
            System.out.println("before : " + Arrays.toString(arr));
            
            for(int i = 0; i < arr.length - 1; i++) {
                for(int j = i + 1; j < arr.length; j++) {
                    if(arr[i] < arr[j]) {
                        int blank;
                        blank = arr[i];
                        arr[i] = arr[j];
                        arr[j] = blank;
                    }
                }
            }
            
            System.out.println("after : " + Arrays.toString(arr));
        
        }
    cs

    알고리즘 문제는 집중해서 풀지 않으면 순식간에 내가 모르는 코드로 넘어가기 때문에 정신차리고 풀어야 한다.

    난수 생성은 Math.random()으로 풀거나 java.util.Random으로 풀거나 둘 중 하나.

    1
    2
    3
    for(int i=0; i<numArr.length; i++){
                numArr[i] = (int)(Math.random()*50)+51;
            }
    cs

    Math.random()을 이용하는 방법은 위와 같다.

    0.0이상 1.0미만 실수를 리턴하기 때문에 50을 곱하고 int형변환을 해서 0이상 50미만으로 만들고, 거기에 51을 더해 51이상 101미만의 정수를 리턴하도록 만든다.

     

     

    ※문제. 학생 3명의 3 과목의 성적을 기록할 수 있는 기본 자료형 2차원 배열을 선언한다. 각 행의 3열에는 과목의 총점을 기록하고, 각 행의 4열에는 과목의 평균을 기록한다.

    index 과목1 과목2 과목3 총점  평균
    0      75.5   75.5   75.5  226.5  75.5
    1      83.5   76.5   80.0  240.0  80.0
    2      79.9   80.1   77.6  237.6  79.2

     

    더보기
    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
        public void result() {
            Scanner sc = new Scanner(System.in);
            double[][] arr = new double[3][5];
            
            for(int i = 0; i < arr.length; i++) {
                double sum = 0;
                
                for(int j = 0; j < arr[i].length; j++) {
                    if(j < arr[i].length - 2) {
                        System.out.print(i + "의 과목 " + (j+1+ "의 점수 입력 > ");
                        arr[i][j] = sc.nextDouble();
                        sum += arr[i][j];
                    }
                    else if(j == arr[i].length -2){
                        arr[i][j] = sum;
                    }
                    else {
                        arr[i][j] = (int)((sum/3)*10)/10.0;
                    }
                }
            }
            
            System.out.println("index\t과목1\t과목2\t과목3\t총점\t평균");
            for(int i = 0; i < arr.length; i++) {
                System.out.print(i +"\t");
                for(int j = 0; j < arr[i].length; j++) {
                    System.out.print(arr[i][j] +"\t");
                }
                System.out.println();
            }
        }
    cs

    이중 for문 안에 if문을 넣어서 3열과 4열일 때는 합계와 평균을 해당 인덱스에 넣도록 했다.

     

    더보기
    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
        public void result2() {
            Scanner sc = new Scanner(System.in);
            double[][] arr = new double[3][5];
            String result = "";
            for(int i = 0; i < arr.length; i++) {
                for(int j = 0; j < arr[i].length; j++) {
                    switch(j) {
                    case 0 : 
                    case 1 : 
                    case 2 : 
                        System.out.println("과목" + (j+1+" 점수 > ");
                        arr[i][j] = sc.nextDouble();
                        break;
                    case 3 : 
                        arr[i][j] = arr[i][0+ arr[i][1+ arr[i][2];
                        break;
                    case 4 : 
                        arr[i][j] = arr[i][3/3;
                        String formatstr = String.format("%d %10.1f %10.1f %10.1f %10.1f %10.1f%n",
                                i, arr[i][0], arr[i][1], arr[i][2], arr[i][3], arr[i][4]);
                        result += formatstr;
                        break;
                    }
                }
            }
            System.out.printf("%s %10s %10s %10s %10s %10s%n","index","과목1","과목2","과목3","총점","평균");
            System.out.println("-------------------------------------------------------------------------");
            System.out.println(result);
        }
    cs

    필기 문제에서도 넘어졌던 break 없는 switch문

    break를 활용할 수 있느냐 없느냐에 따라 switch문의 활용도가 확 달라지는 것 같다.

    String.format은 printf와 동일한 역할을 하는데, 바로 출력을 하느냐 하지 않느냐의 차이가 있다.

    '혼자 있는 방 > Java' 카테고리의 다른 글

    Homework(12)  (0) 2021.07.13
    Homework(11)  (0) 2021.07.08
    필기_Test(2)  (0) 2021.07.05
    Homework(10)  (0) 2021.07.02
    Homework(9)  (0) 2021.07.01

    댓글

Designed by Nana