본문 바로가기
기록/SSAFY

[SSAFY] 220113 기록

by ahj 2022. 1. 13.

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

  1. Keywords는 식별자로 사용할 수 없다. 이름으로 쓸 수 없다는 말
  2. 숫자로 시작 X
  3. 특수문자는 $, _ 쓴다. 근데 C에서 쓰던 방법이라 별로.. 영문으로 많이 쓴다.
  4. Class - 대문자로 시작, 명사형
    변수 - 소문자, 명사형, 동사형도 가끔
    메소드 - 소문자, 동사형
  5. 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도 가능

반복문

  1. for
    for문에서 증감식은 매 루프가 끝난 후에 처리된다.(혼자 찾아본 거, 그래서 i++, ++i 차이가 없다. 굳이 따지자면 ++i가 빠르다는 의견이 있으나 별로 안중요한듯)
  2. while
    while에서 초기값, 증감식은 없지만 적어줘야한다~ 증감식 자주들 빼먹는데 까먹지들 말고
  3. do ~ while
    많이 쓰지는 않지만 쓸 일이 있긴하다. do 안을 최소 한번은 한다. 한번 하고 while문으로 가기 때문에

and(&&), or(||)에서 &, | 하나씩만 써도 되지만 &&, ||를 써라. short circuit logic이 적용돼서 &, | 얘네는 정수형에서 bit 연산자로도 쓰인다.


배열(중요)

동일한 타입의 데이터 여러 개를 저장하는 자료구조(data structure)

배열 사용 작업 단계

  1. 배열의 선언
    int[] data; // (=int data[]) 대괄호를 앞에하든 뒤에 하든 상관은 없다. 크기를 선언 때 주면 안된다
  2. 배열의 생성(여기를 보통 자주 까먹음)
    data = new int[3]; **new** 등장 new를 통해서 이 예시에서는 3칸짜리 배열 생성 배열의 크기는 생성할 때 줘야 한다. 선언할 때 크기를 주면 안된다.
  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

댓글