자바 초보에서 알고리즘 B형까지 도전기2 -사칙연산, 조건문 필수지식-

1. 나눗셈 연산의 몫과 나머지

 

나머지는 %연산으로 구할 수 있지만 몫을 구하는 연산은 python과는 다르게 따로 존재하지 않는다

 

몫을 구할려면 나눗셈 결과 a/b를 int형 변수에 저장하면 된다

 

 

1-1) 형변환에 주의

 

첫번째 (double)a / b는 a를 double로 바꾼 9.0을 4로 나눈 2.25를 내놓지만

 

(double) (a/b)는 a/b 결과인 2를 double로 바꾼 2.0을 내놓는다.

 

그런데 a/b 결과가 왜 2냐고?

 

정수 a,b끼리의 나눗셈 / 연산은 실수가 아니라 정수로 내놓는다.

 

나눗셈 연산에서 두 항이 모두 정수형이면 / 연산 결과는 정수형(몫)이 나온다.

 

public class Main {
    public static void main(String[] args) {
        int a = 9, b = 4;

        System.out.println((double)a / b);
        System.out.println((double)(a / b));
    }
}

2.25
2.0

 

이런 결과는 나눗셈 말고도 다른 연산에서도 주의해야한다.

 

예를 들어 정수형과 실수형을 더하면..? 실수형이 나온다.

 

다음 결과는 5가 아니고 5.0이다.

 

public class Main {
    public static void main(String[] args) {
        double a = 3 / 3;
        int b = 4;

        System.out.println(a + b);
    }
}

5.0

 

 

2. 비교 연산 ==과 equals()

 

a == b은 값 뿐만 아니라 type, 주소값이 모두 동일해야 true라고 한다

 

반면 a.equals(b)는 a,b 객체의 값만을 비교한다. 주소가 달라서 값만 같으면 true라고 한다.

 

equals와 ==의 차이점 (tistory.com)

 

equals와 ==의 차이점

equals와 ==의 차이점 equals 와 == 은 어떤 차이점이 있을까요. 기본적으로 이 둘은 모두 양 쪽에 있는 내용을 비교한 값을 boolean type으로 반환한다는 공통점을 가집니다. 하지만 차이점이 분명 존재

ojava.tistory.com

 

 

3. 삼항 연산자

 

if else라고 이루어진 구문은 삼항연산자를 이용해서 한줄로 표현이 가능하다.

 

다음과 같은 형태의 조건문은...

 

if (조건) {
    a = v1;
}
else {
    a = v2;
}

 

다음과 같이 한줄로 표현 가능하다.

 

조건이 참이면.. v1 거짓이면 v2가 a에 대입된다.

 

a = 조건 ? v1 : v2;

 

특히 ()를 주의해서 사용해야하는데... 다음과 같은 경우..

 

public class Main {
    public static void main(String[] args) {
        int a, n;

        n = 8;
        a = 2 + 6 + n < 10 ? 5 : 6;

        System.out.println(a);
    }
}
6

 

출력은 6이다.

 

2+6+n < 10을 조건으로 보기 때문이다.

 

하지만 2+6은 단순히 상수로 더하고 n < 10에 따라 5이냐 6이냐를 가지고 싶다면...

 

n < 10 ? 5: 6을 ()로 묶어주면 된다.

 

public class Main {
    public static void main(String[] args) {
        int a, n;

        n = 8;
        a = 2 + 6 + (n < 10 ? 5 : 6);

        System.out.println(a);
    }
}
13

 

 

4. else if

 

자바에서 elif는 없다.. python에서나 elif가 있지 다른 언어는 elif라는건 없어

 

 

 

5. 문자열과 문자 비교

 

자바에서 문자열은 ""으로 묶어주고 오직 1개의 글자로 이루어진 문자는 ''으로 묶어준다.

 

예를 들어 "c"는 String 타입이고 'c'는 char 타입이다.

 

이게 생각없이 보면 무슨 의미냐 물을 수 있지만 비교 연산에서 중요하다

 

 

 

6. truthy, falsy

 

자바에서는 python과 다르게 truthy, falsy 개념이 없다.

 

조건식에는 반드시 true, false가 결정되는 조건식을 넣어주라는 소리

 

 

 

7. and, or 논리 연산

 

python은 and, or로 간단하게 표현할 수 있지만, 다른 언어는 기호로 표현해줘야한다.

 

자바에서 and는 &&

 

or는 ||

 

당연하지만 하나의 조건에 and, or은 필요한만큼 여러개 사용할 수 있다 

 

참고로 and는 or보다 우선순위가 높지만.. 외울필요 없이 ()로 적절하게 처리하면 되겠다

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int aMath = sc.nextInt();
        int aEng = sc.nextInt();

        int bMath = sc.nextInt();
        int bEng = sc.nextInt();

        if (aMath > bMath && aEng > bEng) {
            System.out.println(1);
        } else {
            System.out.println(0);
        }
    }
}

100 85
98 78

1

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();

        if ( a < 10 || a > 20){
            System.out.println("yes");
        } else {
            System.out.println("no");
        }
    }
}

10

no

 

8. 부등식 표현 주의할 점

 

또한 특정 범위내 비교 연산을 수행할 때 부등식 그대로 쓰는건 python 말고는 불가능하다.

 

예를 들어 a가 2이상 10이하의 수인지 비교하고 싶을 때

 

2 <= a <= 10으로 하면 에러난다

 

2 <= a && a <= 10으로 해줘야한다 이말이야

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();

        if (a >= 10 && a <= 20) {
            System.out.println("yes");
        } else {
            System.out.println("no");
        }


    }
}

10

yes

 

 

9. 알고리즘 - 3개의 수 중 최솟값, 최댓값, 중앙값을 찾는 프로그램

 

조건문을 이용해서 a,b,c에서 최솟값을 찾아 출력하라하면 어떻게 해야할까?

 

a <= b이고 a <= c이면 a가 최솟값

 

b <= a이고 b <= c이면 b가 최솟값

 

c <= a이고 c <= b이면 c가 최솟값

 

최댓값은 부등호만 바꾸면 되겠지..

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        if (a <= b && a <= c){
            System.out.println(a);
        } else if (b <= a && b <= c){
            System.out.println(b);
        } else {
            System.out.println(c);
        }
    }
}

 

 

중앙값을 찾을려면..?

 

a가 중앙값일려면.. a >= b && c >= a 이거나 a >= c && b >= a

 

b가 중앙값일려면.. b >= c && a >= b 이거나 b >= a && c >= b

 

그 외의 경우는 c가 중앙값일 것이다.

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        if ((a >= b && c >= a) || (a >= c && b >= a)) {
            System.out.println(a);
        } else if ((b >= c && a >= b) || (b >= a && c >= b)) {
            System.out.println(b);
        } else {
            System.out.println(c);
        }
    }
}
TAGS.

Comments