변수
변수 : 컴퓨터에 값을 저장할 공간의 이름
자료형 : 변수에 저장할 값의 형태
변수 선언 : 변수의 자료형을 선택하고 이름을 정하는 것
- 예시 : 자료형 변수 이름; -> 자료형 변수 이름; //정수형 변수 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
정답
public class Main {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
https://www.acmicpc.net/problem/10869
정답
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
정답
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
정답
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
정답
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);
}
}
'Java-Study' 카테고리의 다른 글
Java Study : 4주차 - 백준 문제풀이 (0) | 2022.11.26 |
---|---|
Java Study : 4주차 정리 - 배열과 ArrayList, 상속과 다형성 (0) | 2022.11.26 |
Java Study : 3주차 - 문제 풀이 (1) | 2022.11.19 |
Java Study : 3주차 정리 (0) | 2022.11.18 |
Java Study : 1주차 정리 (0) | 2022.11.06 |