[자바의정석] 3. 연산자

갓김치·2020년 8월 2일
0

자바 문제풀이

목록 보기
2/6

1. 다음 연산의 결과를 적으시오.

public class Practice01 {
    public static void main(String[] args) {
        int x = 2;
        int y = 5;
        char c = 'A';

        System.out.println(1 + x << 33); //6
        //(1+x) << 33 -> 3 << 33
        // 3 * 2^32 * 2^1 = 3*2 = 6
        
        System.out.println(y >= 5 || x < 0 && x > 2); //true
        // 1. && 연산: false && false => false
        // 2. || 연산: true || false => true
        
        System.out.println(y += 10 - x++); //13
        // 1. x++ : 후위 연산, 2 대입 후 계산 (x=3으로 증가)
        // 2. y += 10-2 -> y += 8 -> y = y+8 = 13
        
        System.out.println(x += 2); //5
        // 위에서 x=3 으로 증가함
        // x = x + 2 = 3 + 2 = 5
        
        System.out.println(!('A' <= c && c <= 'Z')); //false
        // 1. c는 'A'로 'A'와 'Z'사이에 있음
        // 2. !(true) = false
        
        System.out.println('C' - c); //2
        //1. 'C' - 'A' (int - int)
        //2. 아스키값 2차이
        
        System.out.println('5' - '0'); //5
        //1. '5' - '0' (int - int)
        //2. 아스키값 5차이
        
        System.out.println(c + 1); //66
        //1. 'A' + 1 -> char + int -> int + int
        //2. 'A'의 아스키값 65 + 1 = 66
        
        System.out.println(++c); //B
        //1. 전위, 'A'에서 1증가
        //2. 증감연산자는 형변환 일어나지 않음
        
        System.out.println(c++); //B
        //1. 후위, 우선 대입후 나중에 증가
        //2. B로 출력된 후 c='C'
        
        System.out.println(c); //C
        //위에서 증가한대로 C 출력

2. 아래의 코드는 사과를 담는데 필요한 바구니(버켓)의 수를 구하는 코드이다. 만일 사과의 수가 123개이고 하나의 바구니에는 10개의 사과를 담을 수 있다면, 13개의 바구니가 필요할 것이다. (1)에 알맞은 코드를 넣으시오.

public class Practice02 {
    public static void main(String[] args) {
        int numOfApples = 123;
        int sizeOfBucket = 10;
        
        //내 풀이
        int numOfBucket = numOfApples % sizeOfBucket > 0 ? numOfApples / sizeOfBucket + 1 : numOfApples / sizeOfBucket;
        System.out.println("필요한 바구니의 수 : " + numOfBucket);
        
        //선생님 풀이
        //나머지 == 0 -> apples/bucket + 0
        //나머지 != 0 -> apples/bucket + 1
        int numOfBucket = numOfapples / sizeOfBucket + ((numOfapples % sizeOfBucket > 0) ? 1 : 0 )
        
        
        
    }
}

3. 아래는 변수 num의 값에 따라 '양수', '음수', '0'을 출력하는 코드이다. 삼항 연산자를 이용해서 (1)에 알맞은 코드를 넣으시오.

public class Practice03 {
    public static void main(String[] args) {
        int num = 10;
        System.out.println(num > 0 ? "양수" : num = 0 ? "0" : "음수");
    }
}

4. 아래는 변수 num의 값 중에서 백의 자리 이하를 버리는 코드이다. 만일 변수 num의 값이 '456'이라면 '400'이 되고, '111'이라면 '100'이 된다. 알맞은 코드를 넣으시오.

public class Practice04 {
    public static void main(String[] args) {
        int num = 456;
        
        System.out.println((int)(num/100f)*100);
        //내풀이
        //1. 소수점화 num / 100f
        //2. int로 (int)(num/100f)
        //3. 자릿수복귀 (int)(num/100f)*100
 
        System.out.println(num - num%100);
        //쉬운 풀이1(정석)
        
        System.out.println((num/100)*100);
        //쉬운 풀이2 
        //1. 어짜피 원하는 자릿수 이하의 값은 필요 없다.
        //2. num / 100 --- 4
        //3. (num / 100) * 100 --- 400
    }
}

5. 아래는 변수 num의 값 중에서 일의 자리를 1로 바꾸는 코드이다. 만일 변수 num의 값이 333이라면 331이 되고, 777이라면 771이 된다.

public class Practice05 {
    public static void main(String[] args) {
        int num = 333;
        
        System.out.println((num/10)*10+1);
        //내 풀이
        //1. num/10 --- 33
        //2. (num/10)*10 --- 330
        //3. (num/10)*10+1 --- 331
      
        
    }
}

6. 아래는 변수 num의 값보다 크면서도 가장 가까운 10의 배수에서 변수 num의 값을 뺀 나머지를 구하는 코드이다. 예를 들어, 24의 크면서도 가장 가까운 10의 배수는 30이다. 19의 경우 20이고, 81의 경우 90이 된다. 30에서 24를 뺀 나머지는 6이기 때문에 변수 num의 값이 24라면 6을 결과로 얻어야 한다.

public class Practice06 {
    public static void main(String[] args) {
        int num = 24;
        System.out.println((num/10 + 1) * 10 - num);
        //내풀이
        //1. (num의 값보다 크면서도 가장 가까운 10의 배수) - num
        
        System.out.println(10 - num%10);
        //쉬운 풀이
        //문제: 10 - num의 1의자리
    }
}

7. 아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다. 변환공식이 'C = 5 / 9 x (F - 32)'라고 할 때, 알맞은 코드를 적으시오. 단, 변환 결과값은 소수점 셋째자리에서 반올림해야한다.(Math.round()를 사용하지 않고 처리할 것)

public class Practice07 {
    public static void main(String[] args) {
        int fahrenheit = 100;
        float celcius = (int)((5f/9 * (fahrenheit - 32))*100+0.5) /100f;
        //내 풀이
        //1. 실수값 나오도록 공식수정 5f / 9 * (F-32)
        //2. 둘째자리까지 정수화 (5f/9*(F-32))*100
        //3. 반올림 (5f/9*(F-32))*100+0.5
        //4. 0이하 절삭 (int)((5f/9*(F-32))*100+0.5)
        //5. 자릿수복귀 (int)((5f/9*(F-32))*100+0.5)/100f

        System.out.println("Fahrenheit : " + fahrenheit);
        System.out.println("Celcius : " + celcius);
    }
}

8. 아래 코드의 문제점을 수정해서 실행결과와 같은 결과를 얻도록 하시오.

class Exercise3_8 {
    public static void main(String[] args) {
        byte a = 10;
        byte b = 20;
        byte c = a + b;
        char ch = 'A';
        ch = ch + 2;
        float f = 3 / 2;
        long l = 3000 * 3000 * 3000;
        float f2 = 0.1f;
        double d = 0.1;
        boolean result = d == f2;
        System.out.println("c=" + c); //c=30
        System.out.println("ch=" + ch); //ch=C
        System.out.println("f=" + f); //f=1.5
        System.out.println("l=" + l); //l=27000000000
        System.out.println("result=" + result); //result=true
    }
}

수정한 코드

class Exercise3_8 {
    public static void main(String[] args) {
        byte a = 10;
        byte b = 20;
        byte c = (byte)(a + b);
        
        char ch = 'A';
        ch = (char)(ch + 2);
        
        float f = 3f / 2;
        long l = 3000L * 3000 * 3000;
        
        float f2 = 0.1f;
        double d = 0.1;
        boolean result = !(d == f2);
        
        System.out.println("c=" + c); //c=30
        System.out.println("ch=" + ch); //ch=C
        System.out.println("f=" + f); //f=1.5
        System.out.println("l=" + l); //l=27000000000
        System.out.println("result=" + result); //result=true
    }
}

9. 다음은 문자형 변수 ch가 영문자(대문자 또는 소문자)이거나 숫자일 때만 변수 b의 값이 true가 되도록 하는 코드이다. 알맞은 코드를 넣으세요.

public class Practice09 {
    public static void main(String[] args) {
        char ch = 'z';
        boolean b = ('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z') || ('0' <= ch && ch <= '9');

        System.out.println(b);
    }
}

10. 다음은 대문자를 소문자로 변경하는 코드인데, 문자 ch에 저장된 문자가 대문자인 경우에만 소문자로 변경한다. 문자코드는 소문자가 대문자보다 32만큼 더 크다. 예를 들어 'A'의 코드는 65이고, 'a'의 코드는 97이다. 알맞은 코드를 넣으세요.

public class Practice10 {
    public static void main(String[] args) {
        char ch = 'A';
        char lowerCase = 'A'<=ch && ch<='Z' ? (char)(ch+32) : ch;

        System.out.println("ch : " + ch);
        System.out.println("ch to lowerCase : " + lowerCase);
    }
}

참고

https://rutgo.tistory.com/476?category=826920

profile
갈 길이 멀다

0개의 댓글