전체 글

전체 글

    PatternMatchUtils 를 활용한 필터링

    PatternMatchUtils PatternMatchUtils 는 추상 클래스로 선언된 유틸 클래스이다. /** * Utility methods for simple pattern matching, in particular for * Spring's typical "xxx*", "*xxx" and "*xxx*" pattern styles. * * @author Juergen Hoeller * @since 2.0 */ public abstract class PatternMatchUtils { /** * Match a String against the given pattern, supporting the following simple * pattern styles: "xxx*", "*xxx", "*x..

    [BOJ 1715] 카드 정렬하기

    카드 정렬하기 BOJ 1715 : 카드 정렬하기 해설 구현 public class Main { private static int N; private static PriorityQueue pQ = new PriorityQueue(); public static void main(String[] args) { input(); solution(); } private static void input() { Scanner sc = new Scanner(System.in); N = sc.nextInt(); for (int i = 0; i ..

    [BOJ 18352] 특정 거리의 도시 찾기

    특정 거리의 도시 찾기 BOJ 18352 : 특정 거리의 도시 찾기 해설 다익스트라 알고리즘 사용을 눈치 챘다면, 풀이는 쉽다. 구현 class Node implements Comparable { private int vertex; // 정점 private int cost; // 비용 public Node(int vertex, int cost) { this.vertex = vertex; this.cost = cost; } public int getVertex() { return vertex; } public int getCost() { return cost; } @Override public int compareTo(Node o) { return this.cost - o.cost; // 비용이 낮을 수록..

    [BOJ 3190] 뱀

    뱀 BOJ 3190 : 뱀 해설 처음에 이 문제를 풀 때, 제 시간에 풀지 못했다. 꼬리, 몸통, 머리 부분이 이해가 잘 안갔었는데 이 부분에 대한 해설은 다음과 같다. # 꼬리, 몸통, 머리 예를들어 뱀이 (0, 0)에서 시작해서 계속 사과를 먹으며 우측으로 이동해 (0, 3)까지 간 상태라면 queue = (앞=꼬리) { (0,0), (0,1), (0,2), (0,3) } (뒤=머리) 가 된다. 사과를 못 먹어서 꼬리부분을 당겨야 되는 상황이라면 꼬리 위치의 값을 빈 값으로 설정하면 된다. 이 문제의 핵심은 Queue 를 사용한다는 것을 빨리 눈치 채야하는 것 같다. 그리고 나머지는 구현 문제 답게, 문제에 나와있는 조건들에 따라 차근차근 구현하면 되는 것 같다. Strategy 전략(Strategy..

    이것이 코딩 테스트다 : 모험가 길드

    모험가 길드 책 이것이 코딩테스트다의 모험가 길드 문제풀이 해설 몇 가지 케이스를 만들어서 오름차순(Asc) 와 내림차순(Desc) 기준으로 구분을 해봤다. 마지막 Case4 를 보면 오름차순으로 정렬되었을 때 그룹 수의 최댓값을 구할 수 있는 것을 알 수 있다. 그리고 파란색으로 밑줄친 부분이 조건문이 필요하다는 핵심적인 부분이다. 저부분을 통해 어떤식으로 조건문을 짜면 되는지 힌트를 얻을 수 있다. 구현 public class Main { private static int N; private static int[] fear; private static int group; public static void main(String[] args) { input(); greedy(); System.out.pr..

    세그멘테이션과 페이징

    세그멘테이션과 페이징 세그멘테이션과 페이징을 배우기 전에 아래 내용에 대해서 학습이 안되어 있다면 배우고 오자. 주소 바인딩(Address Binding) 스와핑(Swapping) 메모리 할당과 단편화 세그멘테이션 세그멘테이션(Segmentation)은 프로그래머가 인지하는 메모리의 모습을 실제 메모리의 모습(Ex. 프로세스의 메모리 구조)으로 변환해주는 메모리 기법을 제공한다. 세그먼테이션은 프로세스를 세그먼트(segment)의 집합으로 만든다. 각 세그먼트의 크기는 일반적으로 같지 않다. 프로세스를 code, data, stack & heap 으로 나누는 것 역시 세그먼테이션의 모습이다. 물론 code, data, stack & heap 각각 내부에서 더 작은 세그먼트로 나눌 수도 있다. 세그먼트(S..

    메모리 할당과 단편화

    메모리 할당과 단편화 이번 시간에 메모리 할당과 단편화에 대해서 배워보자. 메모리 할당 메모리 할당은 프로세스를 메모리에 할당하는 것을 의미한다. 메모리 공간을 할당할 때 빈곳이 여러개라면, 어디에 할당을 해야할지 정해야 한다. 공간을 할당한다는 것은 메모리를 어떻게 분할(partition)할 것인지와 연관이 있는데 두 가지 방식이 있다. 고정 분할 고정 분할은 말 그대로 메모리를 똑같은 고정된 크기로 분할하는 것을 의미한다. 각 분할마다 하나의 프로세스를 가진다. 고정 분할 방식을 사용하면 내부 단편화가 발생할 수 있다. 가변 분할 가변 분할은 메모리의 어떤 부분이 사용되고 있고, 어떤 부분이 사용되고 있지 않은가를 파악할 수 있는 테이블을 유지하여 관리하는 기법이다. 초기에 모든 메모리 공간은 한 개..

    스와핑

    스와핑(Swapping) 스와핑(Swapping) 개념은 메모리 관리 전략을 배울때 꼭 알아두어야하는 필수 개념이다. 메모리 관리 전략 메모리 용량이 증가함에 따라 프로그램의 크기 또한 계속 증가하고 있기 떄문에 메모리는 언제나 부족하다. 메모리 관리 전략이란 제한된 메모리를 효율적으로 사용하기 위한 전략을 의미한다. CPU 스케줄링 CPU 를 효율적으로 사용하기 위한 여러 CPU 스케줄링 기법들에 대해서 배운다. 메모리 관리전략 메모리를 효율적으로 사용하기 위해서 메모리 관리 전략들에 대해서 배운다. 스와핑(Swapping) 스와핑(Swapping)은 원어 그대로 교체라는 의미를 지닌다. 무엇을 교체하는지 배워보자. 프로세스가 실행 되기 위해서는 메모리에 있어야 하지만, 프로세스는 실행 중에 임시로 예..