Algorithm
3 posts
JAVA Coding Test Stack

Stack(LIFO) 데이터의 입력과 출력 순서는 후입선출(FILO)방식이다. 데이터를 제한적으로 접근할 수 있는 구조이고, 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조 (DFS) 스택은 거의 모든 애플리케이션을 만들 때 사용되는 자료구조로서, 스택과 연관된 알고리즘을 제대로 이해하느냐 못하느냐에 따라 기본 알고리즘을 설계할 수 있느냐 없느냐가 결정 Stackoverflow 꽉 찬 스택에 요소를 삽입하고자 할 때 스택에 요소가 넘쳐서 에러가 발생하는 것을 스택 버퍼 오버플로(stack buffer overflow) 우리가 흔히 아는 stackoverflow도 이와 같은 의미에서 가져왔다 Stack 자료구조 LIFO(Last In First Out), 후입선출(後入先出) 구조이다. 마지막에 들어온게 첫번째로 빠져나간다. 그래서 직전의 데이터를 빠르게 갖고 올 수 있다. 뒤로 가기, 실행 취소(redo/undo), 그리고 컴퓨터 구조에서의 스택 메모리가 대표적이다. 균형성 검사를…

JAVA Coding Test Hash

Hash 데이터를 효율적으로 저장하고 검색하기 위해 사용되는 알고리즘. Java에서 해시는 , , 과 같은 자료구조에서 많이 활용함. 해시 알고리즘을 사용하려면 먼저 데이터의 해시 값을 계산해야 하는데, 이때 해시 함수는 객체의 속성 값을 기반으로 고유한 해시 코드를 생성. key-value 에서 key를 테이블에 저장할 때 key값을 Hash Method를 이용해 계산을 수행한 후, 그 결과값을 배열의 인덱스로 사용하여 저장하는 방식이다. 여기서 key값을 계산하는 것이 Hash Method 이다. Hashing HashMap과 같이 Hashing을 구현한 컬렉션 클래스에서는 Object 클래스에 정의된 hashCode()를 Hash Method로 사용한다. Object 클래스에 정의된 hashCode()는 객체의 주소를 이용하는 알고리즘으로 해시 코드를 만들어내기 때문에 모든 객체에 대해 중복되지 않는 값을 제공한다. String 클래스의 경우 Object로 부터 상속받은 ha…

JAVA Coding Test Introduction

백준 입출력 일반적으로 Scanner sc = new Scanner(System.in); 을 통해 입력을 받곤한다. 그런데 Scanner는 내부적으로 nextFloat() 이런걸 호출 시 다음 입력을 찾기 위해 정규식을 사용하므로 느리다. 이걸 쓰면 로직은 맞았는데도 시간초과나서 맞왜틀을 외치게될 수 있다. java, java.util.Scanner -> 6.068초 java, java.io.BufferedReader -> 0.934초 입력은 하나만! 입력을 위한 클래스는 하나만 쓸 것! Scanner나 BufferedReader나 둘 다 미리 일정량을 읽어들인 후 사용자의 요청(readLine() 등)에 따라 해당 버퍼에서 꺼내온다. 따라서 이걸 여러개 선언해버리면 이미 다른 클래스에서 버퍼에 쌓인 부분때문에 제대로 읽을 수 없게된다. BufferedReader (입력 TIP) 사용하려면 main클래스에 throws IOException을 추가해 주어야 한다. System.out…