코딩과 결혼합니다

코딩테스트 준비中 본문

청첩장/결혼식장 : 코린이의 저장소

코딩테스트 준비中

코딩러버 2023. 11. 28. 22:37
728x90

1일 차  : 이중탐색 + SQL문

2일 차  : 연결리스트 + SQL문

3일 차  : 큐/스택 + SQL문

4일 차  : 문자열 알고리즘 + SQL문 (현재!)


알고리즘을 풀며 알게 된 깨알 지식들

 

  • 정확한 중간 값 구하기
int mid = left + (right - left) / 2;​

 

( right - left )를 해주면 큰 숫자가 들어왔을 때 생길 수 있는 오버플로우도 방지할 수 있다.

  • static
public static int
  1. 공용 변수 : 클래스 수준에서 사용되는 공용 변수로 인스턴스마다 독립적인 값을 유지하지 않고 모든 인스턴스가 동일한 값을 공유한다. 여러 인스턴스 간에 데이터를 공유하고, 메모리 사용량을 줄이는 데 유용하다.
  2. 정적 메서드 : 인스턴스를 생성하지 않고도 호출할 수 있다.

 

  • switch - case문
switch (token){
    case "+":
        stack.push(stack.pop() + stack.pop());
        break;

    case "-":
        stack.push(-stack.pop() + stack.pop());
        break;

    case "*":
        stack.push(stack.pop() * stack.pop());
        break;

    case "/":
        int divisor = stack.pop();
        stack.push(stack.pop() / divisor);
        break;

    default:
        stack.push(Integer.parseInt(token));
}

 

  • 제네릭 타입
public class Stack<T> {
    class Node<T> {
        private T data;
        private Node<T> next;

        public Node(T data) {
            this.data = data;
        }
    }

...
  1. 타입 안정성 : 제네릭을 사용하면 컴파일 시에 타입 체크를 할 수 있어 잘못된 타입으로 인한 오류를 미리 방지한다.
  2. 코드의 재사용성 : 다양한 타입의 객체를 처리하는 일반적인 알고리즘을 작성할 수 있다.
  3. 컬렉션 활용 : 제네릭을 사용하면 잘못된 타입의 객체가 컬렉션에 저장되는 것을 방지할 수 있다.
  4. 코드 가독성 : 코드에서 타입 변환을 명시적으로 작성할 필요가 없어 코드가 간결해진다.

 

  • 문자 입/출력
    //문자열 출력하기
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String a = sc.next();
        System.out.println(a);
    }


Scanner로 문자열을 입력하 엔터를 누르면 변수 a에 그 문자열이 저장된다.

다음 System.out.println으로 이를 출력할 수 있다.

 

  • String의 substring
String sub = my_string.substring(0,s);
String subend = my_string.substring(s + overwrite_string.length());

 

첫 번째 줄은 0번째 인덱스부터 2번째 인덱스를 남겨놓고 그 뒤의 문자열을 잘라낸다.

두 번째 줄은 s + overwrite_string.length() 인덱스 바로 전까지 잘라낸다.

 

  • StringBuilder
StringBuilder newString = new StringBuilder();
  1. 가변성 : 가변적인 문자열을 다룰 수 있다. 문자열을 직접 수정, 추가, 삭제, 변경 등 다양한 조작이 가능하다.
    이는 String 클래스와는 달리 문자열을 새로 생성하는 것이 아니라 내부 버퍼를 직접 조작하여 성능을 향상한다.
  2. 성능 : 반복문을 사용하여 여러 문자열을 합치는 경우, 매번 새로운 문자열을 생성하는 것보다 이를 사용하는 것이 더 효율적이다.
  3. 메모리 관리 : 문자열 객체를 반복적으로 생성하거나 해제할 필요가 없어 메모리 관리 측면에서 효율적이다.

  • charAt과 toCharArray
    • charAt(index) : 주어진 인덱스에 해당하는 위치에 있는 문자 반환
    • toCharArray() : 문자열을 문자 배열로 반환한다.