
자바로 Queue를 직접 구현해봤다. 큐는 자료구조로, FIFO(First-in, First-out)의 특성을 가지고 있다. 두가지 방법을 사용해서 구현했다. 배열과 Node(연결 리스트) 방법 두가지다. 배열을 이용하여 구현 ArrayQueue.class public class ArrayQueue { private int[] arr; private int size; public ArrayQueue() { arr = new int[20]; } public int getSize() { return size; } public void setSize(int size) { this.size = size; if(size 1) { for(int i=1; i

자바로 stack을 직접 구현해봤다. 스택은 자료구조로, LIFO(Last-in, First-out)의 특성을 가지고 있다. Stack.class package stack; public class Stack { private int[] arr; private int length; public Stack() { this.arr = new int[100]; length = 0; } public int getLength() { return length; } public void setLength(int length) { this.length = length; if(length

LinkedList ArrayList와는 하나의 큰 배열을 사용하는 방식이다. 이와는 다르게 LinkedList는 각각의 노드를 연결하는 방식을 사용한다. 연결 리스트로 구현되어 있고 각각의 데이터는 노드(Node)로 구성되어 연결되어 있는 구조다. 각 노드는 데이터와 다음 노드의 값을 가지고 있다. LinkedList의 장점은 데이터 삽입/삭제가 용이하다는 점이다. 원하는 위치 어디에서나 삽입/삭제 시에 변경되는 노드만 다시 연결해주면 되기 때문에 빠른 연산이 가능하다. LinkedList에서의 삽입 과정 LinkedList에서의 삭제 과정 그래서 데이터의 삽입/삭제가 자주 발생하는 경우에 LinkedList를 사용하는 것이 좋다. 그러나, LinkedList는 순차접근만 가능하기 때문에 인덱스를 이용..

1. Primitive Type 종류, 값의 범위, 기본 값 2. Primitive Type 과 Reference Type primitive type (원시 타입) 정수, 실수, 문자, 논리 리터럴 과 같은 실제 데이터 값을 저장하는 타입이다. non-object Reference Type (참조 타입) 메모리 번지 값을 통해 객체를 참조하는 타입이다. 객체(obejct)의 주소를 저장한다. 예를 들면 class, interface, enum, array, String type을 말한다. 3. literal이란? 리터럴은 프로그램에서 직접 표현한 값(데이터)을 말한다. 1) 정수 리터럴 10진수, 8진수, 16진수, 2진수 리터럴 정수 리터럴은 int형으로 컴파일, long 형은 숫자뒤에 L이나 l을 붙..

1. JVM이란? JVM은 자바 가상 머신으로 Java Virtual Machine의 줄임말이다. Java는 운영체제(OS)에 구애받지 않고 실행할 수 있는데 , JVM이 그 역할을 한다. 자바 프로그램은 컴퓨터가 이해할 수 있는 언어(기계어)인 바이너리코드가 아닌 바이트코드(가상 머신이 이해할 수 있는 코드)로 되어 있다. 여기서 JVM의 필요성을 알 수 있다. 기계어는 cpu의 제조사마다 달라서 하나의 언어가 아니다. 다 다른 컴퓨터 환경에서 실행하려면 각각의 제조사에 맞는 기계어를 알고 있어야 한다. 그렇지만 개발자가 모든 종류의 cpu의 기계어를 알고 있기에 매우 번거롭다. 그래서 JVM이 자바 프로그램을 다양한 cpu 환경에서 이식성 문제 없이 실행할 수 있도록 도와주는 역할을 하는 것이다. 이..

요즘 백준에서 그래프 유형 문제를 많이 풀다보니 그래프 문제를 푸는 실력이 많이 좋아진 것 같다. 카카오 문제를 풀면 괜히 기분이 좋다 ㅎㅎ 문제를 보고 플로이드 와샬 문제라는 것을 깨닫고 풀었는데, 다익스트라로도 좋은 풀이가 있는 것을 보고 정리해보려한다. https://programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, ..
예외처리 프로그래밍을 할 땐 다양한 예외 상황이 발생한다. 이 예외 처리를 잘해야 좋은 프로그램이 될 수 있다. 예외 처리를 try-catch문을 사용하거나 다른 여러가지 방법들로 할수도 있지만, 이는 코드가 복잡해지고 유지보수 하기에도 어렵다는 문제점이 있다. 예외처리를 한번에 다른곳에서 처리하고 비즈니스 로직에서는 비즈니스 로직만 작성하여 코드가 복잡해지지 않도록 할 수 있다. @ExceptionHandler 이 어노테이션은 메서드에 붙일 수 있는데, @Controller와 @RestController가 적용된 Bean에서 생기는 예외를 캐치하여 이 메서드에서 처리해주도록 한다. 메서드의 인자로 캐치하려는 예외 클래스를 작성하면 된다. 리턴 타입은 하고싶은대로 해도 된다. @ExceptionHandl..
그래프 문제로 어려운 난이도는 아니지만 좋은 문제 같아서 정리해보려한다. 풀이를 생각하는 과정이 마음에 들었다. https://www.acmicpc.net/problem/1647 1647번: 도시 분할 계획 첫째 줄에 집의 개수N, 길의 개수M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 집 www.acmicpc.net 마을 안의 도시끼리 한 길로만 연결되고 나머지 길은 없앨 수 있다는 점에서 최소 스패닝 트리를 생각했다. 크루스칼 알고리즘을 사용하여 풀 수 있다. 유지비를 최소로 하기 위해서 정렬 후 유지비가 작은 길부터 크루스칼 알고리즘을 사용하면 된다. 그런데..