자바(11)
-
[BOJ] 모노미노도미노::알고리즘
출처 : https://www.acmicpc.net/problem/19235 19235번: 모노미노도미노 모노미노도미노는 아래와 같이 생긴 보드에서 진행되는 게임이다. 보드는 빨간색 보드, 파란색 보드, 초록색 보드가 그림과 같이 붙어있는 형태이다. 게임에서 사용하는 좌표 (x, y)에서 x는 행, www.acmicpc.net 해당 문제는 빨간색 보드에서 파란색 보드와 초록색 보드로 좌표에 따라 블록이 이동하는 게임입니다. 블록의 종류는 1x1, 1x2, 2x1이 있습니다. 해당 문제의 마지막 테스트케이스인 예제 7번을 수행하게 되면 다음 그림과 같이 배치됩니다. 파란색 보드에서 열 부분이 모두 채워지거나 초록색 보드에서 행 부분이 모두 채워지면 점수를 획득합니다. 열이나 행 부분이 모두 채워지지 않은 ..
2020.07.19 -
[BOJ] 최단경로(with Java, C++ code)::알고리즘
문제 출처 : BOJ(https://www.acmicpc.net/problem/1753) 보통 그래프에서 정점끼리의 최단경로를 구하는 문제는 4가지가 있습니다. 1) 하나의 정점에서 다른 하나의 정점까지의 최단경로를 구하는 문제 2) 하나의 정점에서 모든 정점까지의 최단경로를 구하는 문제(다익스트라 알고리즘) 3) 모든 정점에서 하나의 정점까지의 최단경로를 구하는 문제 4) 모든 정점에서 모든 정점까지의 최단경로를 구하는 문제(플로이드 와샬 알고리즘) 추가로 모든 정점을 최소비용으로 연결하는 문제(MST: Minimum Spanning Tree, 최소 신장 트리)는 2가지가 있습니다. 5) 모든 정점까지의 최소비용을 오름차순으로 정렬해 연결하는 문제(크루스칼 알고리즘) 6) 하나의 정점에서 모든 정점까지..
2020.07.07 -
[프로그래머스] 하노이의 탑::알고리즘
문제 출처 : Programmers(https://programmers.co.kr/learn/courses/30/lessons/12946) 하노이의 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있습니다. 게임의 목적은 두 가지 조건을 만족시키면서 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것입니다. 1) 한 번에 하나의 원판을 옮길 수 있습니다. 2) 큰 원판이 작은 원판 위에 있어서는 안됩니다. 하노이의 탑 문제는 재귀 호출을 이용해 풀 수 있는 가장 유명한 예제 중 하나입니다. 출처 위키백과(https://ko...
2020.07.06 -
Hash의 기본 개념과 구조::자료구조
1. Hash의 기본 개념 key와 value를 이용해 특정 데이터인 value를 고유 인덱스인 key로 관리하는 자료구조입니다. 내부적으로 배열을 사용해 데이터를 저장하기 때문에 빠른 검색 속도를 가지고 있습니다. 특별한 알고리즘(Hash Function)을 이용해 데이터와 관련한 고유의 숫자를 만들어 인덱스로 활용합니다. 특정 데이터가 저장되는 인덱스는 해당 데이터의 고유한 위치이기 때문에 삽입, 삭제 시 데이터의 이동이 없습니다. 2. Hash의 구조 Hash Table을 이용해 데이터를 저장합니다. Hash Code / value 객체에 대응하는 고유의 정수값을 Hash Code라고 합니다. 데이터는 Hash Function을 거쳐 value에 저장되는데 이때 key(index) 값이 Hash C..
2020.07.03 -
String, StringBuffer, StringBuilder::자바
자바에서 문자열을 다루는 대표적인 클래스로 String, StringBuffer, StringBuilder가 있습니다. 연산 횟수가 많아지거나 멀티스레드, Race Condition 등의 상황이 자주 발생한다면 각 클래스의 특징을 이해하고, 상황에 맞는 적절한 클래스를 사용해야 합니다(Race Condition이란? -> https://junboom.tistory.com/29). 1. String 불변의 속성을 가집니다. String str = "Hello"; str += " world"; 위 상황에서 str 변수가 "Hello"에서 "Hello world"로 변환된다고 생각할 수도 있지만, 실제로는 "Hello" 객체에서 "Hello world"라는 새로운 객체를 참조하게 되어 "Hello" 객체는 G..
2020.07.03 -
Vector와 ArrayList 비교::자바
자바에서 크기를 동적으로 할당할 수 있는 배열은 Vector와 ArrayList가 있습니다. 1. Vector - Collections 프레임워크가 포함되어 있지 않던 초기 자바 버전부터 제공한 레거시 클래스입니다. - 필요에 따라 크기를 동적으로 조절할 수 있는 동적 배열을 구현할 수 있습니다. - 배열과 마찬가지로 정수 인덱스를 이용해 배열에 액세스 할 수 있습니다. - 스레드 안전(Thread Safe)한 배열로 한 번에 하나의 스레드만 벡터의 메소드를 호출할 수 있습니다. 2. ArrayList - Collections 프레임워크의 일부이며 java.util 패키지 내에 존재합니다. - 필요에 따라 크기를 동적으로 조절할 수 있는 동적 배열을 구현할 수 있습니다. - 자바 표준 배열보다 약간 느릴..
2020.07.03