Recap.
Java
Java는 객체지향언어(OOP, Object-oriented Programming). 시작은 가전기기, 양방향 TV에서였다. 그런데 성능이 괜찮아서 프로그래밍 언어로까지 성장
platform → Java가 실행되는 실행환경
보통 쓰는게 Standard Edition
(SE), 사물인터넷 때문에 Micro Edition
도 뜨고 있음. Enterprise Edition
(EE)은 Standard Edition
까지 포함한다. enterprise 환경에서 돌아가는 Java network은 연결되어 있되, 멀리 떨어져있어도 되고, 사용자 pc에 Java가 없어도 되고. 웹에서 쓰는게 다 이런 형태지 뭐 우리가 필요한 건 인터넷 연결과 브라우저 뿐.
class라는 것 하나가 object 한 개, 부품 한 개 라고 생각하면 됨
Java 초창기 catchphrase → Write once, Run anywhere!
식별자 이름
식별해줄 수 있는 대상 식별자? Class, 변수, Method
- Keywords는 식별자로 사용할 수 없다. 이름으로 쓸 수 없다는 말
숫자로 시작X- 특수문자는 $, _ 쓴다. 근데 C에서 쓰던 방법이라 별로.. 영문으로 많이 쓴다.
- Class - 대문자로 시작, 명사형
변수 - 소문자, 명사형, 동사형도 가끔
메소드 - 소문자, 동사형 - true, false 역시 식별자로 써주면 안된다.
Data type
char은 2byte
long 보다는 float이 더 크다. 왜? → long의 사이즈가 더 크지만, float는 4byte를 갖고 잘 나눈다. float는 소수점 데이터 발생시 다 저장해줄 수 있기 때문에 더 크다. long은 소수점 아래를 날리고.
무조건 실수형 data가 정수형 data보다 크다.
switch-case
switch의 조건(int_expr)으로 들어올 수 있는 것은?
→ long은 안됨. byte, short, int, char, String도 가능
반복문
- for
for문에서 증감식은 매 루프가 끝난 후에 처리된다.(혼자 찾아본 거, 그래서 i++, ++i 차이가 없다. 굳이 따지자면 ++i가 빠르다는 의견이 있으나 별로 안중요한듯) - while
while에서 초기값, 증감식은 없지만 적어줘야한다~ 증감식 자주들 빼먹는데 까먹지들 말고 - do ~ while
많이 쓰지는 않지만 쓸 일이 있긴하다. do 안을 최소 한번은 한다. 한번 하고 while문으로 가기 때문에
and(&&), or(||)에서 &, | 하나씩만 써도 되지만 &&, ||를 써라. short circuit logic이 적용돼서 &, | 얘네는 정수형에서 bit 연산자로도 쓰인다.
배열(중요)
동일한 타입의 데이터 여러 개를 저장하는 자료구조(data structure)
배열 사용 작업 단계
- 배열의 선언
int[] data; // (=int data[])
대괄호를 앞에하든 뒤에 하든 상관은 없다.크기를 선언 때 주면안된다 - 배열의 생성(여기를 보통 자주 까먹음)
data = new int[3];
**new**
등장 new를 통해서 이 예시에서는 3칸짜리 배열 생성 배열의 크기는 생성할 때 줘야 한다. 선언할 때 크기를 주면 안된다. - 배열의 사용
data[0] = 100;
primitive는 선언만 해도 메모리에 생성이 된다. 하지만 reference는 선언한다고 메모리에 생성되는 것이 아니다.
int a
- 기본형
- 선언만해도 메모리에 생성
- 하지만
기본값이 없다.
int[] a
- 참조형
- 생성을 해야지만 메모리에 생성(
new
) - 만들어지게 되면 기본값(0과 같은)이 들어가 있다.
배열 생성시 기본값
- int[]: 0이 기본값으로 들어가있음
- double[]: 0.0이 기본값으로 들어가있음
- boolean[] : false가 기본값으로 들어가있음
- 참조형 배열 : null이 기본값으로 들어가있음
배열의 1선언과 2생성, 3초기화를 한꺼번에 지정
int[] data = {100, 200, 300};
이렇게 하면 new
라는 키워드를 안써줘도 된다.
짧은 for문(향상된 for문)(foreach)
for( int i = 0; i < data.length; i++ ) {
System.out.println(value);
}
// 둘은 같음
for( int value: data ) {
System.out.println(value);
}
이렇게 쓰면 편하겠지
2차원 Array
String[][] msg = new String[2]/*행*/[3]/*열*/;
빈문자열과 null은 다른 값이다.(“”≠ null)
2차원 배열을 배열의 배열로 봐도 된다. 그래서 위의 msg에서 msg.length
의 값은 2가 나온다.
int[] a, b[], c[][];
// 이렇게 선언하면? a는 1차원, b는 2차원, c는 3차원 배열
int[][] x;
// x와 차원이 같은 것은? b
int[][] a = new int[3][]; // C에서는 안되는데 Java에서는 됨
// 이렇게는 돼도
// int[][] a = new int[][3]; // 이렇게는 안된다.
// a.length? 3 행은 결정된거고 아직 열을 모르는 거다.
// 예를 들어 0행에 2열, 1행에 4열, 3행 1열 이런식일 수 있잖아
// 만들어보면
a[0] = new int[2];
a[1] = new int[4];
a[2] = new int[1];
// 2행 내 배열의 크기는 a[1].length로 구하면 된다.
Java에서의 입력은?
java.util.Scanner → JDK가 제공
// System.in: 키보드 입력
// Scanner: 키보드로 입력되는 값들을 받아와서 처리
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt(); // 키보드 입력값을 int로 받아옴.(Scanner의 method)
System.out.println(num1 + 10);
Scanner는 그냥 코드로 받아온다.
Spacebar로 구분해도 되고, Enter로 구분해도 되고
코테 문제 풀 때 입력받은 값도 항상 확인해보기
System.out.println(Arrays.toString(val));
이런 식으로
탐색
2차원 배열에서는 탐색이 중요하다.
탐색 → 4방탐색(기준값에서 상하좌우), 8방탐색(기준값에서 상하좌우+우상우하좌하좌상)
4방탐색
상
방향 이동? → 행(-)
감소, 열은 그대로
하
방향 이동? → 행(+)
증가, 열은 그대로
좌
방향 이동? → 행은 그대로, 열(-)
감소
우
방향 이동? → 행은 그대로, 열(+)
증가
상 | 하 | 좌 | 우 | |
---|---|---|---|---|
x | -1 | +1 | 0 | 0 |
y | 0 | 0 | -1 | +1 |
문제에 따라서 기준점이 달라질 수 있으므로 항상 4방으로 시작하는 게 아니라 배열 범위에 맞나 항상 체크를 해줘야 한다.
알고리즘 문제에서 가장 중요한 것은 독해
다!
'기록 > SSAFY' 카테고리의 다른 글
[SSAFY] 웰컴키트 수령 (1) | 2022.01.18 |
---|---|
[SSAFY] 220112 기록 (0) | 2022.01.12 |
[SSAFY] 220110~220111 아이디어톤 (0) | 2022.01.10 |
[SSAFY] 220107 3일차 로봇 코딩 (0) | 2022.01.07 |
[SSAFY] 220106 게임코딩 + Daily Sprint (1) | 2022.01.06 |
댓글