본문 바로가기

코딩테스트

[코딩테스트] 코딩테스트 대비 Java 문법 벼락치기 정리

1. 프리미티브 타입과 레퍼런스 타입

int, long, float, double과 같은 프리미티브 타입(Primitive Type)과

Integer, Long, Float, Double과 같은 레퍼런스 타입(Reference Type)

1.1 정수형

선언

int a = 13;
int b = 4;

산술 연산

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);

비교 연산

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);
System.out.println(a <= b);

비트 연산

System.out.println(a & b);
System.out.println(a | b);
System.out.println(a ^ b);
System.out.println(~a);
System.out.println(a << 2);
System.out.println(a >> 1);

1.2 부동소수형

소수를 저장할 때 사용

사칙연산

System.out.println(2.5 + 3.7)  # 더하기 / 6.2
System.out.println(7.9 - 4.2)  # 빼기  / 3.7
System.out.println(1.5 * 4.8)  # 곱하기 / 7.199999999999999
System.out.println(10.0 / 3.2) # 나누기 / 3.125
System.out.println(10.0 % 3.2) # 모듈러 / 0.39999999999999947

논리연산

double x = 0.5;
double y = 1.2;
double z = 2.0;
System.out.println(x > y && y < z);  // AND 연산 / false
System.out.println(x < y || y < z);  // OR 연산 / true
System.out.println(!(x > y));        // NOT 연산 / true

2. 컬렉션 프레임워크

2.1 배열

import java.util.Arrays;

public class Solution {
	public static void main(String[] args) {
		int[] array = {1,2,3,4,5};
		int[] array2 = new int[] {1,3,5,7,9};
		int[] array3 = new int[5];
		
		array3[0] = 0;
		array3[1] = 2;
		array3[2] = 4;
		array3[3] = 6;
		array3[4] = 8;
		
		System.out.println(Arrays.toString(array));
		System.out.println(Arrays.toString(array2));
		System.out.println(Arrays.toString(array3));
	}
}

배열의 인덱스

import java.util.Arrays;

public class Main {
	public static void main(String[] args) {
		int[] myArray = {1,4,2,5,3};
		
		myArray[1] = 7;
		System.out.println(Arrays.toString(myArray)); // [1, 7, 2, 5, 3]
		
		System.out.println(myArray[2]);
		
		myArray[4] = myArray[2];
		System.out.println(Arrays.toString(myArray)); // [1, 7, 2, 5, 2]
	}
}

배열 복사

import java.util.Arrays;

class Test {
	public static void main(String[] args) {
		int[] arr1 = {10,20,30,40,50};
		
		int[] arr2 = new int[arr1.length * 2];
		
		for(int i=0; i < arr.length; i++) {
			arr2[i] = arr1[i];
		}
		arr1 = arr2;
	}
}

arraycopy

import java.util.Arrays;

class Test {
	public static void main(String[] args) {
		int[] arr1 = {10,20,30,40,50};
		
		int[] arr2 = new int[arr1.length * 2];
		
		System.arraycopy(arr1,0,arr2,0,arr1.length);
		/*
        - 첫번째 인자 : 복사할 배열
        - 두번째 인자 : 복사를 시작할 배열의 위치
        - 세번째 인자 : 붙여넣을 배열
        - 네번째 인자 : 복사된 배열값들이 붙여질 시작위치 (차례대로 붙여 넣어진다)
        - 다섯번째 인자 : 지정된 길이만큼 값들이 복사된다.
        */
	}
}
import java.util.Arrays;

class Test{
	public static void main(String[] args) {
        int[] arr1 = {10, 20, 30, 40, 50};

        int[] arr2 = new int[arr1.length * 2]; // 우선 초기 배열보다 길이가 두배인 새로운 배열을 선언

		// Array.copyOf() 메서드 사용     
        arr2 = Arrays.copyOf(arr1, arr1.length); // arr1 배열을 arr1.length 전체 길이만큼 전체 복사해서 arr2에 할당
        System.out.println(Arrays.toString(arr2)); // [10, 20, 30, 40, 50]
        
        arr2 = Arrays.copyOfRange(arr1, 1, 3); // 배열요소 시작점, 끝점 지정. 1, 2 만 복사해서 반환
        System.out.println(Arrays.toString(arr2)); // [10, 20, 30, 40, 50]
	}
}

배열 정렬

import java.util.Arrays;

class Test{
	public static void main(String[] args) {
        int[] arr = { 3,2,0,1,4 };

        // 오름차순 정렬
        Arrays.sort(arr); // 자기 자신 배열을 정렬 시킴 (정렬된 배열을 반환하는 것이 아니다)
        System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]

        // 내림차순 정렬 
        Arrays.sort(arr, Collections.reverseOrder()); // 배열을 내림차순으로 정렬할 때는 Collections 클래스의 reverseOrder() 함수를 사용
        System.out.println(Arrays.toString(arr)); // [4,3,2,1,0]

        // 배열 일부부만 정렬
        int[] arr = { 3,2,0,1,4 };
        Arrays.sort(arr, 0, 3); // 배열 요소 0, 1, 2 만 정렬
        System.out.println(Arrays.toString(arr)); // [0, 2, 3, 1, 4]
	}
}
Arrays.sort(arr);

Arrays.sort(arr, Collections.reverseOrder());

Arrays.sort(arr,0,3);

배열 비교

Arrays.equals(arr1, arr2);

2차원 배열

int[][] arr2 = {
                  {10,20,30},
                  {40,50,60},
                  {70,80,90},
                  {100,200,300}
                };
                
for(int i = 0 ; i < number.length ; i++) {	// 먼저 열 부분을 순회하고
    for(int j = 0 ; j < number[i].length ; j++) { // 행 부분을 순회하며 각 원소를 출력
        System.out.print(number[i][j]);
    }
}
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[][] arr1 = { 
            { "홍길동", "임꺽정" },
            { "박혁거세", "주몽", "고담덕" }
        };
        String[][] arr2 = { 
            { "홍길동", "임꺽정" },
            { "박혁거세", "주몽", "고담덕" }
        };
        String[][] arr3 = { 
            { "홍길동" },
            { "주몽", "고담덕" }
        };

        System.out.println("arr1 == arr2 : " + Arrays.deepEquals(arr1, arr2)); // arr1 == arr2 : true

        System.out.println("arr1 == arr3 : " + Arrays.deepEquals(arr1, arr3)); // arr1 == arr3 : false
    }
}

2.2 리스트

ArrayList<Integer> list = new ArrayList<>();

list.add(1);
list.add(2);
list.add(4);

System.out.println(list.get(2)); // 인덱스로 값에 접근

2.3 해시맵

key, value 값을 저장하는 해시 테이블

키를 사용하여 값을 검색하는 자료구조

HashMap<String, Integer> map = new HashMap<>();

map.put("apple",1);
map.put("banana",2);
map.put("orange",3);

System.out.println(map);
String key = "apple";

if (map.containsKey(key)) {
	int value = map.get(key);
	System.out.println(key + ": " + value);
}
else {
	System.out.println(key + "는 해시맵에 없습니다.");
}
map.put("banana",4); # 값 수정

map.remove("orange"); # 값 삭제

2.4 문자열

String string = "Hello World!";

String string = "He";
string += "llo";

문자열 수정

String string = "Hello";
string = string.replace("l", ""); // "l"을 모두 삭제

StringBuffer, StringBuilder

StringBuilder sb = new StringBuilder();

sb.append(10);
sb.append("ABC");

// 출력
System.out.println(sb); // 10ABC
sb.deleteCharAt(3);     // 3번째 인덱스 문자 삭제
System.out.println(sb); // 10AC
sb.insert(1, 2);        // 1번째 인덱스에 2라는 문자 추가
System.out.println(sb); // 120AC

3. 메서드

public static int add(int num1, int num2) {
  int result = num1 + num2;
  return result;
}

람다식

private static class Node {
  int dest, cost;

  public Node(int dest, int cost) {
    this.dest = dest;
    this.cost = cost;
  }
}

public static void main(String[] args) {
  Node[] nodes = new Node[5];
  nodes[0] = new Node(1, 10);
  nodes[1] = new Node(2, 20);
  nodes[2] = new Node(3, 15);
  nodes[3] = new Node(4, 5);
  nodes[4] = new Node(1, 25);
  Arrays.sort(nodes, (o1, o2) -> Integer.compare(o1.cost, o2.cost)); // ➊

  Arrays.sort(nodes, new Comparator<Node>() {
    @Override
    public int compare(Node o1, Node o2) {
      return Integer.compare(o1.cost, o2.cost);
    }
  }); // ➋
}

코딩테스트 벼락치기로 공부한 Java 문법들 입니다. 앞으로 더 추가할 예정입니다~!