본문 바로가기

Java-Study

Java Study : 2주차 정리

변수

변수 : 컴퓨터에 값을 저장할 공간의 이름

자료형 : 변수에 저장할 값의 형태

변수 선언 : 변수의 자료형을 선택하고 이름을 정하는 것

  • 예시 : 자료형 변수 이름; -> 자료형 변수 이름;  //정수형 변수 level을 선언
  • level = 10;  //값 10을 level 변수에 대입

초기화 : 변수에 처음 값을 대입하는 것

  • 예시 : int level = 10;  //level변수 선언과 동시에 값을 초기화

변수 선언 시 변수 이름은 영문자나 숫자를 사용할 수 있고, 특수 문자 중에는 $, _만 사용 가능하다.

변수 이름은 숫자로 시작할 수 없다.

자바에서 이미 사용중인 예약어는 사용할 수 없다.

 

자료형

자바에서 제공하는 자료형은 기본 자료형과 참조 자료형이 있다.

정수 자료형

정수 자료형은 양수, 음수, 0을 나타내는데 사용하는 자료형이다. 정수는 byte형, short형, int형, long형 4가지 자료형으로 나타낼 수 있다.

선언 예시 : int num = 1234;  //long형의 경우 뒤에 L,l을 붙인다.

 

문자 자료형

컴퓨터는 0과 1로만 표현할 수 있기 때문에 문자를 특정 정수 값으로 정하여 표현을 한다. 이 코드 값을 모아둔 것을

문자 세트라고 하고 문자를 정해진 코드 값으로 변환하는 것을 문자 인코딩이라고 한다. 반대는 문자 디코딩

선언 예시 : char myChar = 'A';   

 

실수 자료형

실수 값을 표현을 하기에는 0과 1 사이에 무한개의 실수가 있기 때문에 정수와는 조금 다른 방식으로 사용하여 표현한다.

그래서 사용하는 것이 부동 소수점 방식이다.

실수 자료형에는 float형과 double형이 있는데 각각 4바이트, 8바이트를 사용한다. double형이 더 정밀하게 실수를 표현할 수 있기 때문에 자바에서 기본으로 사용한다. 

선언 예시 : double dnum = 3.14;

                  float fnum = ..14F;  //float형을 사용할 경우 F,f를 숫자 뒤에 붙인다.

 

논리 자료형

어떤 변수의 참, 거짓의 값을 나타내는데 사용한다. 종류는 boolean 한가지 뿐이다.

선언 예시 : boolean isMarried;

 

상수

항상 변하지 않는 값을 상수라고 한다.

자바에선 상수는 fianl 예약어를 사용하여 선언한다.

예시 : final double PI = 3.14;

 

리터럴

프로그램에서 사용하는 모든 숫자, 문자, 논리값을 일컫는 말

char ch = 'A';  /  int num = 10;  /  final double PI = 3.14;

위 선언에서 사용한 'A', 10, 3.14와 같은 문자와 숫자를 리터럴 혹은 리터럴 상수라고 한다.

 

형 변환

정수와 실수의 경우 컴퓨터 내부에서 표현되는 방식이 다르기 때문에 더한다고 할 때 연산 수행이 불가능하다.

따라서 하나의 자료형으로 통일을 해야 하는데 이때 이루어지는것이 형 변환이다.

형 변환은 크게 묵시적 형 변환과 명시적 형 변환으로 구별할 수 있다.

형 변환의 기본 원칙은 다음과 같다.

  • 바이트 크기가 작은 자료형에서 큰 자료형을 형 변환은 자동으로 이루어진다.
  • 덜 정밀한 자료형에서 더 정밀한 자료형으로 형 변환은 자동으로 이루어진다.

묵시적 형 변환

묵시적 형 변환의 경우 3가지가 있다.

  • 바이트 크기가 작은 자료형에서 큰 자료형으로 대입하는 경우
    • byte bNum = 10;
    • int iNum = bNum;
  • 덜 정밀한 자료형에서 더 정밀한 자료형으로 대입하는 경우
    • int iNum = 20;
    • float fNum = iNum;
  • 연산 중에 자동으로 변환되는 경우
    • int iNum = 20
    • float fNum = iNum;
    • double dNum;
    • dNum = fNum + iNum;  //계산 과정에서 iNum이 float 형이 되고 더한 값이 double형이 된다.

 

명시적 형 변환

명시적 형 변환의 경우에도 3가지가 있는데 묵시적과 반대이다.

  • 바이트 크기가 큰 자료형에서 작은 자료형으로 대입하는 경우(자료형의 크기가 넘어가면 자료 손실일 발생할 수 있음)
    • int iNum = 1000;
    • byte bNum = (byte)  //강제로 형을 바꾸는 경우 바꿀 자료형을 써줘야 한다.
  • 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우
    • double dNum = 3.14;
    • int iNum = (int)dNum;  //이 경우 실수 부분만 대입이 된다.
  • 연산 중 형 변환
    • 묵시적이랑 방식은 같음

 

기본 연산자

연산에서 사용하는 기호를 연산자라 하고 연산에 사용하는 값을 항이라고 한다.

 

대입 연산자

변수에 값을 대입하는 연산자로 이항 연산자 중에서 우선순위가 가장 낮다 -> 가장 나중에 연산

예시 : int age = 24;  //age변수에 값 24를 대입

 

부호 연산자

부호 연산자는 +, - 두 가지가 있다. 연산에 쓰는 이항 연산자 이면서 부호를 나타내는 단항 연산자로도 사용한다.

 

산술 연산자

사칙 연산에서 사용하는 연산자이다. 곱셈과 나누기는 각각 곱셈( * )과 나눗셈( / ) 를 사용한다.

나눗셈 연사자에서 /는 몫을 %는 나머지를 구할때 사용한다.

 

증가/감소 연산자

단항 연산자로 연산자 앞이나 뒤에 사용하여 값을 1만큼 늘리거나 줄인다.

++ : 항의 값에 1을 더한다

  • val = ++num;  //num의 값이 1 증가후 변수에 대입
  • val = num++;  //num 값을 변수에 대입한 후 num값 1 증가

-- : 항의 값에서 1을 뺀다(방식은 ++와 같음)

 

관계 연산자

항이 두 개인 이항 연산자로 어느 항이 더 큰지, 작은, 같은지 등의 여부를 검사한다.

관계 연산자의 결과 같은 참(true) 또는 거짓(false)로 반환된다.

관계 연산자의 종류 : >, <. >=, <=, ==, !=

>=의 경우는 크거나 같은지 확인하는 것이고 !=의 경우는 다르면 참이고 같으면 거짓으로 ==의 반대라고 보면 된다.

 

논리 연산자

논리 연산을 프로그래밍 언어로 구현한 연산자로 주로 관계 연산자와 사용한다.

관계 연산자의 우선순위가 더 높기 때문에 관계 연산자의 결과 값을 기반으로 논리 연산자의 결과 값을 계산한다.

  • &&(논리 곱) : 두 항이 모두 참인 경우에만 결과 값이 참이다. 그렇지 않은 경우는 거짓
  • ||(논리 합) : 두 항 중 하나의 항만 참이면 결과 값은 참이다. 두 항임 모두 거짓이면 결과 값은 거짓
  • !(부정) : 단항 연산자로 참인 경우에는 거짓으로, 거짓인 경우에는 참으로 바꾼다.

 

복합 대입 연산자

대입 연산자와 다른 연산자를 조합해 하나의 연산처럼 사용하는 연산자

산술 연산자, 비트 연산자와 함께 사용

  • += : 두 하으이 값을 더해서 왼쪽 항에 대입
  • -= : 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입
  • *= : 두 항의 값을 곱해서 왼쪽 항에 대입
  • /= : 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입
  • %= : 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입
  • <<= : 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입
  • >>= : 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입(왼쪽에 채워지는 비트 값은 부호 비트와 동일)
  • >>>= : 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입(왼쪽에 채워지는 비트 값은 0)
  • &= : 두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입
  • |= :두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입 
  • ^= : 두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입

 

조건 연산자

연산에 필요한 항의 개수가 세 개여서 삼항 연산자라고도 한다.

주어진 조건식이 참인 경우와 거짓인 경우 다른 결과 값이 나온다.

예시 : 조건식 ? 결과1 : 결과2  -> 조건식이 참이면 결과1, 거짓이면 결과2가 선택된다.

 

비트 연산자

비트 단위로 연산이 이루어지는 연산자

 

비트 논리 연산자

비트 단위로 &, |, ^, ~ 연산이 이루어진다.

 

&(and)연산자 : 두개의 비트 값이 모두 1인 경우에만 연산의 결과 값이 1이 된다.

위의 예시를 보면 0 & 0 -> 0, 0 & 1 -> 0, 1 & 0 -> 0, 1 & 1 -> 1인 것을 볼 수 있다.

 

|(or)연산자 : 비트 값이 하나라고 1이면 연산 결과 값이 1이 된다.

위의 예시를 보면 0 | 0 -> 0, 1 | 0 -> 1, 0 | 1 -> 1, 1 | 1 -> 1인 것을 볼 수 있다.

 

^(XOR)연산자 : 값은 값이면 0, 다른 값이면 1의 결과 값을 가진다.

위의 예시를 보면 0 ^ 0 -> 0, 1 ^ 0 -> 1, 0 ^ 1 -> 1, 1 ^ 1 -> 1인 것을 볼 수 있다.

 

~(반전)연산자 : 비트 값을 0은 1로, 1은 0으로 바꾸는 연산자이다.

위의 예시를 보면 ~0 -> 1, ~1 -> 0인 것을 볼 수 있다.

 

비트 이동 연산자

비트 이동 연산자는 <<, >>, >>> 세 가지가 있다. 시프트 연산자라고도 부른다.

 

<< 연산자 : 왼쪽으로 비트는 이동하는 연산자

이동을 하면 앞 비트는 없어지고 뒷부분은 0으로 채워진다.

왼쪽으로 n비트 이동한다는 것은 기존 값에 2^n만큼 곱한다는 뜻이다.

 

>>연산자 : 오른쪽으로 비트를 이동하는 연산자

오른쪽으로 n비트 이동하면 기존 값을 2^n 만큼 나눈다.

 

>>>연산자 : 비트를 오른쪽으로 이동한다. 왼쪽에 채워지는 비트 값이 부호 비트와 상관 없이 무조건 0이 된다.

 


백준 문제 풀이

https://www.acmicpc.net/problem/2557

 

2557번: Hello World

Hello World!를 출력하시오.

www.acmicpc.net

정답

public class Main {
    public static void main(String args[]) {
      System.out.println("Hello World!");
    }
}

 

https://www.acmicpc.net/problem/10869

 

10869번: 사칙연산

두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. 

www.acmicpc.net

정답

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        int A = in.nextInt();
        int B = in.nextInt();
        
        in.close();
        
        System.out.println(A+B);
        System.out.println(A-B);
        System.out.println(A*B);
        System.out.println(A/B);
        System.out.println(A%B);
    }
}

 

https://www.acmicpc.net/problem/10926

 

10926번: ??!

준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때

www.acmicpc.net

정답

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        String Name = in.next();

        in.close();

        System.out.println(Name+"??!");
    }
}

 

https://www.acmicpc.net/problem/2588

 

2588번: 곱셈

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

www.acmicpc.net

정답

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        String num1 = in.next();
        String num2 = in.next();

        in.close();

        int num3 = Integer.parseInt(num1)*Integer.parseInt(num2.substring(2));
        int num4 = Integer.parseInt(num1)*Integer.parseInt(num2.substring(1,2));
        int num5 = Integer.parseInt(num1)*Integer.parseInt(num2.substring(0,1));
        int num6 = Integer.parseInt(num1)*Integer.parseInt(num2);

        System.out.println(num3);
        System.out.println(num4);
        System.out.println(num5);
        System.out.println(num6);
    }
}

 

https://www.acmicpc.net/problem/18108

 

18108번: 1998년생인 내가 태국에서는 2541년생?!

ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다. 불교 국가인 태국

www.acmicpc.net

정답

import java.util.Scanner;

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

        int year = num-543;

        System.out.println(year);

    }
}