본문 바로가기
Java

[TIl] 231226 Java의 정석 문제풀이 9-10, 9-11

by studymode 2023. 12. 26.

 

[9-10]

다음과 같이 정의된 메서드를 작성하고 테스트하시오.

메서드명 : format

기 능 : 주어진 문자열을 지정된 크기의 문자열로 변환한다. 나머지 공간은 공백으로 채운다. 반환타입 : String

매개변수 : String str - 변환할 문자열

                 int length - 변환된 문자열의 길이

                 int alignment - 변환된 문자열의 정렬조건 (0:왼쪽 정렬, 1: 가운데 정렬, 2:오른쪽 정렬)

 

 

문제

class Exercise 9-10 {
    /*
    (1) format메서드를 작성하시오.
    1. length의 값이 str의 길이보다 작으면 length만큼만 잘라서 반환한다.
    2. 1의 경우가 아니면, length크기의 char배열을 생성하고 공백으로 채운다. 
    3. 정렬조건(alignment)의 값에 따라 문자열(str)을 복사할 위치를 결정한다.
    	(System.arraycopy()사용)
    4. 2에서 생성한 char배열을 문자열로 만들어서 반환한다.
    */
    
	public static void main(String[] args) {
    String str = "가나다";
    
	System.out.println(format(str,7,0)); // 왼쪽 정렬 
    System.out.println(format(str,7,1)); // 가운데 정렬 
    System.out.println(format(str,7,2)); // 오른쪽 정렬
	}
}

 

 

실행결과

가나다 
  가나다   
    가나다

 

 

풀이: 답

class Exercise9_10 {
    static String format(String str, int length, int alignment) {

        // 1. length의 값이 str의 길이보다 작으면 length만큼만 잘라서 반환한다.
        int diff = length - str.length();
        if (diff < 0) return str.substring(0, length);

        // 2. 1의 경우가 아니면, length크기의 char배열을 생성하고 공백으로 채운다.
        char[] source = str.toCharArray(); // 문자열을 char배열로 변환
        char[] result = new char[length];

        for (int i = 0; i < result.length; i++)
            result[i] = ' '; // 배열 result를 공백으로 채운다.

        // 3. 정렬조건(alignment)의 값에 따라 문자열(str)을 복사할 위치를 결정한다.
        switch (alignment) {
            case 0:
            default:
                System.arraycopy(source, 0, result, 0, source.length);
                break;
            case 1:
                System.arraycopy(source, 0, result, diff / 2, source.length);
                break;
            case 2:
                System.arraycopy(source, 0, result, diff, source.length);
                break;
        }
        // 4. 2에서 생성한 char배열을 문자열로 만들어서 반환한다.
        return new String(result);
    }// static String format(String str, int length, int alignment)

    public static void main(String[] args) {
        String str = "가나다";

        System.out.println(format(str, 7, 0)); // 왼쪽 정렬
        System.out.println(format(str, 7, 1)); // 가운데 정렬
        System.out.println(format(str, 7, 2)); // 오른쪽 정렬
    }
}

 

 

내 풀이

if문으로 풀었다. switch-case가 아직 익숙하지 않지만 이럴땐 if문 보다 효율적일 것 같다

앞으로 상황에 맞게 switch-case문도 적극 사용해 봐야겠다!

 

 

 

[9-11]

문제

커맨드라인으로 2~9사이의 두 개의 숫자를 받아서 두 숫자사이의 구구단을 출력 하는 프로그램을 작성하시오.

예를 들어 3과 5를 입력하면 3단부터 5단까지 출력한다.

 

실행결과

C:\jdk1.8\work\ch9>java Exercise9_11 2 
시작 단과 끝 단, 두 개의 정수를 입력해주세요. 
USAGE : GugudanTest 3 5

C:\jdk1.8\work\ch9>java Exercise9_11 1 5 
단의 범위는 2와 9사이의 값이어야 합니다.
USAGE : GugudanTest 3 5

C:\jdk1.8\work\ch9>java Exercise9_11 3 5 3*1=3
3*2=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27
4*1=4
4*2=8
4*3=12
4*4=16
4*5=20
4*6=24
4*7=28
4*8=32
4*9=36
5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
5*6=30
5*7=35
5*8=40
5*9=45

 

 

class Main{
    public static void main(String[] args) {
        int from = 0;
        int to = 0;

        try{
            if (args.length !=2) {
                throw new Exception("시작 단과 끝 단, 두개의 정수를 입력해주세요.");
            }
            from = Integer.parseInt(args[0]);
            to = Integer.parseInt(args[1]);

            if (!(2 <= from && from<=9 && 2<= to && to<=9)){
                throw new Exception("단의 범위는 2와 9사이의 값이어야 합니다.");
            }
        }catch (Exception e){
            System.out.println(e.getMessage());
            System.out.println("USAGE : GugudanTest 3 5");
            System.exit(0);
        }

        //시작 단(from)이 끝 단(to)보다 작아야하니가
        //to보다 from의 값이 크면 두 값을 바꾼다.
        if (from > to){
            int tmp = from;
            from = to;
            to = tmp;
        }

        //from단부터 to단까지 출력
        for(int i =from; i<=to; i++){
            for (int j=1; j<=9; j++){
                System.out.println(i+"x"+j+"="+i*j);
            }
            System.out.println();
        }
    }
}

 

 

 

내 풀이

커맨드라인으로 입력받는거 자체를 처음 들어봐서 당황했다.

Scanner로만 값을 받아봤는데 커맨드라인으로 받을땐 먼저 값을 입력하면 그 값이 args로 들어오는걸 알게 되었다.

커맨드라인에서는 띄어쓰기를 기준으로 argument를 받는다!

 

 


크리스마스 잘 쉬고 다시 공부하려고 하니 영 집중이 안된다ㅠㅠ

거의 따라치기 수준의 자바 문제를 풀어봤다...

내일부터 정신차리고 다시 힘내서 공부해 봐야징...

나자신 화이팅....