본문 바로가기
Algorithm/명품 JAVA 에센셜

명품 JAVA 에센셜 3장 실습 문제 풀이

by 준그래머 2023. 11. 28.
반응형

1. 영문 소문자를 하나 입력받고 그 문자보다 알파벳 순위가 낮은 모든 문자를 출력하는 프로그램을 작성하라.

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("영문 소문자 하나를 입력하세요>>");
    String aplha = sc.next();
    sc.close();
    StringBuilder sb = new StringBuilder();
    for(int i = 'a'; i < aplha.toCharArray()[0]; i++){
        sb.append((char)i);
        if(i != (aplha.toCharArray()[0]-1)){
            sb.append(", ");
        }
    }
    System.out.println(sb);
}

for문을 이용해 'a'부터 입력받은 값의 위치 이전까지 StringBuilder에 담은 뒤 출력하도록 했습니다.

 

2. 정수를 10개 입력받아 배열에 저장한 후, 배열을 검색하여 3의 배수만 골라 출력하는 프로그램을 작성하라

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("정수 10개를 입력하세요>>");
    int[] numbers = new int[10];
    for(int i = 0; i < 10; i++){
        numbers[i] = sc.nextInt();
    }
    sc.close();

    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < 10; i++){
        if(numbers[i]!=0 && numbers[i]%3==0) {
            if(i > 0 && sb.length()!=0){
                sb.append(", ");
            }
            sb.append(numbers[i]);
        } 
    }
    System.out.println(sb);
}

문제에 나온대로 정수 10개를 배열에 저장 한 뒤에 3의 배수만 골라서 StringBuilder에 담아 출력했습니다.

 

3. 정수를 입력받아 짝수이면 "짝", 홀수이면 "홀"을 출력하는 프로그램을 작성하라. 사용자가 정수를 입력하지 않는 경우에는 프로그램을 종료하라. 정답을 통해 try-catch-finally를 사용하는 정통적인 코드를 볼 수 있다.

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("정수 입력하세요, 정수가 아닌 경우 종료됩니다>>");
    try{
        int number = sc.nextInt();
        if(number % 2 == 0) 
            System.out.println("짝수");
        else 
            System.out.println("홀수");
    }
    catch(InputMismatchException e){
        System.out.println("프로그램을 종료합니다.");

    }
    finally{
        sc.close();
    }
}

InputMismatchException을 이용해 try-catch문을 작성하고 정수가 아닌 경우 종료를 출력합니다. 정수가 입력된 경우 2로 나눈 나머지가 0인 경우 짝수로 아니 경우 홀수로 출력해 주면 됩니다.

 

4. '일', '월', '화', '수', '목', '금', '토'로 초기화된 문자 배열 day를 선언하고, 사용자로부터 정수를 입력받아 7(배열 day의 크기)로 나눈 나머지를 인덱스로 하여 배열 day에 저장된 문자를 출력하라. 음수가 입력되면 프로그램을 종료하라. 아래 실행 결과와 같이 예외 처리하라.

public static void main(String[] args) {
    String[] day = new String[]{"일", "월", "화", "수", "목", "금", "토"};
    Scanner sc = new Scanner(System.in);
    System.out.print("양의 정수 입력하세요, 그 밖의 경우 종료됩니다.>> ");
    try{
        int index = sc.nextInt();
        if(index < 0) {
            System.out.println("프로그램을 종료합니다.");
        }
        else{
            System.out.println(day[index%7]);
        }
    }
    catch(InputMismatchException e){
        System.out.println("프로그램을 종료합니다.");
    }
    finally{
        sc.close();
    }
}

day에 먼저 문자 배열을 초기화 해준 뒤 정수를 입력받습니다. 만약 정수가 아니거나 음의 정수인 경우 프로그램 종료를 출력합니다. 그 밖의 경우 index%7 위치의 day값을 출력합니다.

 

5. 정수를 10개 입력받아 배열에 저장하고 증가 순으로 정렬하여 출력하라.

public static void main(String[] args) {
    int [] numbers = new int[10];
    Scanner sc = new Scanner(System.in);
    for(int i = 0; i < 10; i++){
        numbers[i] = Integer.MAX_VALUE;
    }
    for(int i = 0; i < 10; i++){
        System.out.print("정수 입력하세요>> ");
        int number = sc.nextInt();
        for(int j = 0; j < numbers.length-1; j++){
            if(number < numbers[j]) {
                for(int k = numbers.length-2; k >= j; k--){
                    numbers[k+1] = numbers[k];
                }
                numbers[j] = number;
                break; 
            }
        }
    }
    System.out.println(Arrays.toString(numbers));
    sc.close();
}

입력받으면서 오름차순으로 정렬하로 록 했는데, 효율은 별로 좋지 않습니다. 그냥 TreeSet을 이용해 입력받는 게 나을 것으로 보입니다.

 

6. 다음과 같이 영어와 한글의 짝을 이루는 2개의 배열을 만들고, 사용자로부터 영어 단어를 입력받아 한글을 출력하는 프로그램을 작성하라. "exit"을 입력하면 프로그램을 종료하라. (난이도 중)

String eng[] = { "student" , "love", "java", "happy", "future"};
String kor[] = { "학생", "사랑", "자바", "행복한", "미래"};

public static void main(String[] args) {
    String eng[] = { "student" , "love", "java", "happy", "future"};
    String kor[] = { "학생", "사랑", "자바", "행복한", "미래"};

    Scanner sc = new Scanner(System.in);
    while(true){
        System.out.print("영어 단어를 입력해주세요>> ");
        String word = sc.next();
        if(word.contentEquals("exit")) break;
        int index = -1;
        for(int i = 0; i < eng.length; i++){
            if(word.contentEquals(eng[i])) index = i;
        }
        if(index<0) 
            System.out.println(word + "가 존재하지 않습니다.");
        else
            System.out.println(word + "의 뜻은 \"" + kor[index] + "\"입니다.");        
    }
    sc.close();
}

 

 

7. 1부터 99까지, 369게임에서 박수를 쳐야 하는 경우, 순서대로 화면에 출력하라. 2장 실습 문제 6을 참고하라.

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

    System.out.print("1~99 사이의 정수를 입력하세요>>");
    int num = sc.nextInt();
    sc.close();
    for(int i = 1; i <= num; i++){
        int count = 0;
        int[] numArr = new int[] {i/10, i%10};
        for(int j = 0; j < numArr.length; j++){
            if(numArr[j] == 3 || numArr[j] == 6 || numArr[j] == 9) count++;
        }
        if(count==1){
            System.out.println("박수짝(" + i + ")");
        }
        else if(count==2){
            System.out.println("박수짝짝(" + i + ")");
        }
    }
}

입력받은 값까지 for 문으로 하나 2장 실습 문제 6과 같은 방식으로 출력해 줍니다.