전체 글

전체 글

    Head First: Design Patterns - 프록시 패턴(Proxy Pattern): 보호 프록시(protection proxy)

    디자인 패턴: 프록시 패턴(Proxy Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Proxy Pattern 이란? 프록시 패턴(Proxy Pattern) 은 어떤 객체에 대한 접근을 제어하기 위한 용도로, 대리인이나 대변인에 해당하는 객체를 제공하는 패턴이다. 프록시 패턴을 사용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체에 대한 접근을 제어하는 대변자 객체를 만들 수 있다. 먼저 Proxy Pattern에서 사용되는 용어와 방법들을 알아보고, 예제를 들겠다. 프록시에서 접근을 제어하는 방법 원격 프록시(remote proxy)를 써서 원격 객체에 대한 접근을 제어할 수 있다. 가상 프록시(v..

    [Java] 백준 2250 (트리의 높이와 너비) Gold 2

    Problem : https://www.acmicpc.net/problem/2250 2250번: 트리의 높이와 너비 첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. www.acmicpc.net Approach 트리에서의 순회 문제였다. 문제만 보고는 순회를 생각하기에 어려웠다. 짜놓고 보니 중위순회 였다는 느낌. 주의할 점은 루트 노드가 항상 1인 것은 아니라는 점이다. 따라서 루트 노드를 찾는 과정이 포함되어야 한다. levelMin[i] 는 레벨 i에서의 가장 왼쪽 노드의 인덱스이다. levelMax[i] 는 레벨 i에서의 가장 오른쪽 노드의 인덱..

    [Java] 백준 16940 (BFS 스페셜 저지) Gold 4

    Problem : https://www.acmicpc.net/problem/16940 16940번: BFS 스페셜 저지 올바른 순서는 1, 2, 3, 4와 1, 3, 2, 4가 있다. www.acmicpc.net Approach 그래프 정보와 BFS 방문 순서가 주어졌을 때, 주어진 방문 순서가 유효한지를 판단하는 문제이다. 현재 노드 기준으로, 방문하지 않은 인접한 노드들을 모두 set에 넣는다. 그리고 다음 방문 순서가 올바른 BFS 순서인지를 판단한다. 주어진 방문 순서의 끝까지 검사하며, 다음 방문 순서가 set에 없다면 올바르지 않은 방문 순서인 것이다. 주의할 점은, 주어진 방문 순서가 1부터 시작하는지를 검사하여 예외처리를 해주어야 한다. (시작점이 1이라고 가정하고 문제를 푸는데, 주어진 ..

    [Java] 백준 16964 (DFS 스페셜 저지) Gold 5

    Problem : https://www.acmicpc.net/problem/16964 16964번: DFS 스페셜 저지 첫째 줄에 정점의 수 N(2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에는 트리의 간선 정보가 주어진다. 마지막 줄에는 DFS 방문 순서가 주어진다. DFS 방문 순서는 항상 N개의 정수로 이루 www.acmicpc.net Approach 그래프 정보와 DFS 방문 순서가 주어졌을 때, 주어진 방문 순서가 유효한지를 판단하는 문제이다. 현재 노드 기준으로, 방문하지 않은 인접한 노드들을 모두 set에 넣는다. 그리고 다음 방문 순서가 올바른 DFS 순서인지를 판단한다. 주어진 방문 순서의 끝까지 검사하며, 다음 방문 순서가 set에 없다면 올바르지 않은 방문 순서..

    [Java] 백준 2146 (다리 만들기) Gold 3

    Problem : https://www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net Approach BFS를 사용하여 풀이할 수 있는 문제이다. 여기서는 섬 인덱싱을 위한 BFS, 그리고 각 섬에서 수행되는 BFS 이렇게 두 가지의 BFS를 사용한다. 문제에서 요구하는 것은, 어떤 섬이든 길이가 최소가 되는 다리 하나를 놓는 것이다. 문제 풀이의 주요 순서는 다음과 같다. 섬 인덱싱을 수행한다. (BFS) 각각의 섬에서 가장 가까운 섬과의 거리를 구한다. (BFS) ..

    Head First: Design Patterns - 프록시 패턴(Proxy Pattern): 가상 프록시(virtual proxy)

    디자인 패턴: 프록시 패턴(Proxy Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Proxy Pattern 이란? 프록시 패턴(Proxy Pattern) 은 어떤 객체에 대한 접근을 제어하기 위한 용도로, 대리인이나 대변인에 해당하는 객체를 제공하는 패턴이다. 프록시 패턴을 사용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체에 대한 접근을 제어하는 대변자 객체를 만들 수 있다. 먼저 Proxy Pattern에서 사용되는 용어와 방법들을 알아보고, 예제를 들겠다. 프록시에서 접근을 제어하는 방법 원격 프록시(remote proxy)를 써서 원격 객체에 대한 접근을 제어할 수 있다. 가상 프록시(v..

    Head First: Design Patterns - 프록시 패턴(Proxy Pattern): 원격 프록시(remote proxy)

    디자인 패턴: 프록시 패턴(Proxy Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. Proxy Pattern 이란? 프록시 패턴(Proxy Pattern) 은 어떤 객체에 대한 접근을 제어하기 위한 용도로, 대리인이나 대변인에 해당하는 객체를 제공하는 패턴이다. 프록시 패턴을 사용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체에 대한 접근을 제어하는 대변자 객체를 만들 수 있다. 먼저 Proxy Pattern에서 사용되는 용어와 방법들을 알아보고, 예제를 들겠다. 프록시에서 접근을 제어하는 방법 원격 프록시(remote proxy)를 써서 원격 객체에 대한 접근을 제어할 수 있다. 가상 프록시(v..

    [Java] 벡준 16947 (서울 지하철 2호선) Gold 3

    Problem : https://www.acmicpc.net/problem/16947 16947번: 서울 지하철 2호선 첫째 줄에 역의 개수 N(3 ≤ N ≤ 3,000)이 주어진다. 둘째 줄부터 N개의 줄에는 역과 역을 연결하는 구간의 정보가 주어진다. 같은 구간이 여러 번 주어지는 경우는 없고, 역은 1번부터 N번까지 번호 www.acmicpc.net Approach 그래프 정보가 주어졌을 때, 사이클을 구하고, 그 사이클로부터 얼마나 멀리 떨어져 있는지를 구하는 문제였다. 먼저 주의할 점은, 노드의 개수가 N개이고, 간선의 개수도 N개이므로, 사이클(순환선)은 무조건 1개 존재한다는 것이다. 문제 풀이의 순서는 다음과 같다. 먼저 사이클 찾은 뒤, 사이클에 속하는 노드들을 표시한다. (cycle 배..

    [Java] 벡준 16929 (Two Dots) Gold 4

    Problem : https://www.acmicpc.net/problem/16929 16929번: Two Dots 첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문 www.acmicpc.net Approach 행렬 정보가 주어졌을 때, 사이클이 존재하는지를 판단하는 문제였다. 사이클을 판별하는 방법은 여러가지가 있지만, 여기서는 DFS를 이용하였다. 모든 정점을 방문할 수 있도록, 방문하지 않은 모든 곳에서 DFS를 수행한다. 그 중에 사이클이 있다면, 더이상 진행할 필요가 없으므로 종료시켰다. 사이클을 판별하는 로직은 다음과 같다. 임의의 시작점에서 DFS를..

    [Java] 정규 표현식(Regular Expression)

    정규 표현식(Regular Expression) 위키피디아에서는 정규표현식을 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어라고 정의하고 있다. 자바에서는 다음과 같은 곳에서 정규표현식 regex을 사용한다. 자바의 정규표현식 정규표현식에는 여러 종류가 있지만 가장 대표적으로 두 개의 정규표현식이 있다. UNIX 계열의 표준 정규표현식인 POSIX 정규표현식 POSIX 정규표현식에서 확장된 Perl 방식의 정규표현식 자바에서는 Perl 방식과 유사한 방식을 선택하고 있지만, Perl 방식과 완전히 똑같은 것은 아니다. 그 차이점은 oracle docs에 수록되어 있다. 내장 메소드의 파라미터 자바의 String 클래스의 내장 메소드를 살펴보면 인자로 String regex 같은 것을 볼..