java

topics 600-알고리즘 & 코딩테스트
types 레퍼런스

600-알고리즘 & 코딩테스트

자주 사용하는 코딩테스트 문법 정리
https://earthteacher.tistory.com/169#gsc.tab=0
import java.util.*;

자바의 자료형 종류

기본 자료형 (Primitive Type)
자바에서 가장 기본이 되는 자료형으로, 메모리 크기와 값의 범위가 정해져 있습니다1.
레퍼 클래스

  • int → Integer
  • double → Double
  • char → Character
자료형 의미 크기 예시
byte 정수 1 byte byte b = 1;
short 정수 2 bytes short s = 2;
int 정수 4 bytes int i = 3;
long 정수 8 bytes long l = 4L;
float 실수 4 bytes float f = 1.2f;
double 실수 8 bytes double d = 2.3;
char 문자 2 bytes char c = 'A';
boolean 논리값(true/false) 1 bit boolean flag = true;

참조 자료형 (Reference Type)
객체의 주소를 저장하는 자료형으로, 대표적으로 다음과 같습니다1.

  • String
  • 배열(Array)
  • 클래스(Class)
  • 인터페이스(Interface)
  • 열거형(Enum)

입출력

import java.io.*;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a = br.readLine().strip();
System.out.println(h+m+s);

형변환

int i = Integer.parseInt("123"); // 문자열 → int
double d = Double.parseDouble("3.14"); // 문자열 → double

Integer.toString(num);
String s1 = String.valueOf(123); // int → 문자열
String s2 = Double.toString(3.14); // double → 문자열

char c = 'A';
int code = (int) c; // 문자 → 정수
System.out.println(code); // 65

int i = 66;
char ch = (char) i; // 정수 → 문자
System.out.println(ch); // 'B'

문자열 찾기

String str = "hello Java!";
System.out.println(str.contains("J"));    // true
System.out.println(str.contains("java")); // false (대소문자 구분)

String str = "hello Java!";
System.out.println(str.indexOf("J")); // 6 (포함되어 있음)
System.out.println(str.indexOf("z")); // -1 (포함되어 있지 않음)
String str = "hello Java!";
System.out.println(str.contains("J"));    // true
System.out.println(str.contains("java")); // false (대소문자 구분)
String str = "hello Java!";
System.out.println(str.indexOf("J")); // 6 (포함되어 있음)
System.out.println(str.indexOf("z")); // -1 (포함되어 있지 않음)

배열

걍 list쓰셈
list 안에는 참조형 잇어야함( 기본형인건 래퍼클래스를 쓰샘)

구분 Array (배열) List (리스트, ArrayList 등)
크기 고정 (생성 시 결정, 변경 불가) 가변 (요소 추가/삭제로 크기 자동 조절)
메모리 연속적인 메모리 공간에 저장 비연속적 메모리 공간(링크드 리스트 등) 또는 내부적으로 동적 배열 사용
속도 접근 속도가 빠름 (인덱스 기반, O(1)) 접근 속도는 배열과 유사하나, 삽입/삭제가 더 빠름(특히 LinkedList)
삽입/삭제 중간 삽입/삭제 시 모든 요소 이동 필요, 비효율적 중간 삽입/삭제가 상대적으로 효율적
자료형 기본형 및 참조형 모두 저장 가능 참조형(객체)만 저장 가능 (기본형은 래퍼클래스 필요)
사용법 arr[인덱스], arr.length list.get(인덱스), list.size(), add(), remove()
용도 크기가 변하지 않는 데이터 집합에 적합 크기가 자주 변하거나 동적 데이터 관리에 적합
import java.util.Arrays;
import java.util.List;

List<String> list = Arrays.asList("A", "B", "C");

List<String> list = new ArrayList<>();

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
Set<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3));
List<String> list = new ArrayList<>() {{
    add("a");
    add("b");
}};
Map<String, Integer> map = new HashMap<>() {{
    put("key1", 1);
    put("key2", 2);
}};

for (String s : arr) {
    list.add(s);
}
list.add("사과");           // 맨 끝에 추가
list.add(1, "바나나");      // 1번 인덱스에 삽입, 기존 값들은 뒤로 밀림
int len = list.size(); // 리스트 길이 반환
list.clear(); // 리스트 비우기
list.remove(0); // 0번 인덱스 값 삭제 
list.remove("바나나"); // "바나나"라는 값 삭제 (처음 발견되는 값만)
list.set(1, "딸기"); // 1번 인덱스 값을 "딸기"로 변경
String fruit = list.get(0); // 0번 인덱스 값 반환
List<String> sub = list.subList(1, 3); // 1번~2번 인덱스 값 반환(3은 미포함)

String result = String.join("-", list); // 조인

// 리스트 자료형 변환
for (String s : strList) { intList.add(Integer.parseInt(s)); }
List<Integer> intList = strList.stream() .map(Integer::parseInt) .collect(Collectors.toList());

// 정렬
Arrays.sort(fruits);
Collections.sort(cars); //list의경우

index 에러

int[] arr = {1, 2, 3};

try {
    System.out.println(arr[5]); // 인덱스 에러 발생
} catch (ArrayIndexOutOfBoundsException e) {
    // pass: 아무 처리도 하지 않음
}

System.out.println("다음 코드 실행"); // 정상적으로 실행됨

배열 인자로넘길때 주의사항

check(park, limit, {i, j}); // ❌ 컴파일 에러!
check(park, limit, new int[]{i, j}); // ✅ 올바른 방법

SET

Set<int[]> set1 = new HashSet<>();
int[] arr1 = {1, 2};
int[] arr2 = {1, 2};
set1.add(arr1);
set1.add(arr2);
System.out.println(set1.size()); // 2

Set<List<Integer>> set2 = new HashSet<>();
List<Integer> a = Arrays.asList(1, 2);
List<Integer> b = Arrays.asList(1, 2);
set2.add(a);
set2.add(b);
System.out.println(set2.size()); // 1

String[] arr = set.toArray(new String[0]); 
System.out.println(arr[0]); 
- `set.toArray(new 타입)` → 원하는 타입의 배열로 변환 (실무에서 권장)

스택 큐

스택

  • **java.util.Stack 
  • 주요 메서드:
    • push(E item): 스택에 값 넣기
    • pop(): 스택에서 값 꺼내기(제거)
    • peek(): 스택 최상단 값 확인(제거하지 않음)
    • isEmpty(): 비었는지 확인
import java.util.Stack;

Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.pop()); // 3
System.out.println(stack.peek()); // 2
System.out.println(stack.isEmpty()); // false

  • java.util.Queue 인터페이스와 LinkedList 또는 ArrayDeque 구현체
  • 주요 메서드:
    • offer(E e): 큐에 값 넣기(뒤에 추가)
    • poll(): 큐에서 값 꺼내기(앞에서 제거)
    • peek(): 큐 맨 앞 값 확인(제거하지 않음)
    • isEmpty(): 비었는지 확인
import java.util.Queue;
import java.util.LinkedList;

Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
System.out.println(queue.poll()); // 1
System.out.println(queue.peek()); // 2
System.out.println(queue.isEmpty()); // false