728x90
반응형
SMALL

큐(Queue)는 컴퓨터 과학에서 사용되는 기본적인 자료 구조 중 하나이다. 큐는 '선입선출'(FIFO, First-In-First-Out) 원칙을 따르는 것으로 알려져 있다. 즉, 큐에 먼저 들어간 항목이 먼저 나오게 된다. 이는 실생활에서 줄을 서는 것과 비슷한 개념이다.

큐에서는 주로 다음 네 가지 기본 연산이 사용된다.

  1. Enqueue: 큐의 뒤쪽에 항목을 추가한다.
  2. Dequeue: 큐의 앞쪽에 있는 항목을 제거하고 반환한다. 이 연산을 수행하면, 큐에서 항목이 제거된다.
  3. Front: 큐의 앞쪽에 있는 항목을 확인한다.
  4. IsEmpty: 큐가 비어 있는지 확인한다.

큐는 다양한 분야에서 사용된다. 예를 들어, 운영 체제에서는 프로세스 스케줄링에 큐를 사용하고, 네트워크에서 패킷 전송을 위한 버퍼로서 큐를 사용한다. 또한, 너비 우선 탐색(BFS)와 같은 알고리즘에서도 큐는 핵심적인 역할을 한다.

import java.util.LinkedList;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();

        queue.add(1);
        queue.add(2);
        queue.add(3);
        System.out.println("Queue: " + queue);

        int removedElement = queue.remove();
        System.out.println("Dequeued element: " + removedElement);
        System.out.println("Queue after dequeue operation: " + queue);

        int frontElement = queue.peek();
        System.out.println("Front element: " + frontElement);
        System.out.println("Queue after peek operation: " + queue);

        boolean isEmpty = queue.isEmpty();
        System.out.println("Is queue empty? " + isEmpty);
    }
}

Integer 타입의 Queue 객체를 생성하고, add 메소드를 사용하여 큐에 원소를 추가하고, remove 메소드를 사용하여 가장 앞의 원소를 제거하고, peek 메소드를 사용하여 가장 앞의 원소를 확인하며, isEmpty 메소드를 사용하여 큐가 비어 있는지 확인한다.

728x90
반응형
LIST

'CS > 알고리즘' 카테고리의 다른 글

DFS(깊이 우선 탐색)  (0) 2023.06.22
동적 계산법  (0) 2023.06.07
스택(Stack)  (0) 2023.06.07
이진 검색 트리(Binary Search Tree, BST)  (0) 2023.05.30
해싱(Hashing)  (0) 2023.05.30
728x90
반응형
SMALL

스택(Stack)은 컴퓨터 과학에서 중요한 자료 구조 중 하나이다. 스택은 항목들이 추가되고 삭제되는 끝이 한 개만 있는 '한정적 접근'의 선형 자료 구조이다. 이러한 특성 때문에 스택은 '후입선출'(LIFO, Last-In-First-Out) 원칙을 따르는 것으로 알려져 있다. 즉, 가장 최근에 스택에 추가된 항목이 가장 먼저 제거되는 순서를 따른다.

스택에서는 주로 다음 네 가지 기본 연산이 사용된다.

  1. Push: 스택의 상단에 항목을 추가한다.
  2. Pop: 스택의 상단에 있는 항목을 제거하고 반환한다. 이 연산을 수행하면, 스택에서 항목이 제거된다.
  3. Peek/Top: 스택의 상단에 있는 항목을 반환하지만 제거하지는 않는다.
  4. isEmpty: 스택이 비어 있는지 확인한다.

스택은 다양한 애플리케이션에서 사용된다. 함수 호출 스택, 실행 취소 스택, 브라우저의 이전 페이지/다음 페이지 구현 등 여러 분야에서 스택의 개념이 활용된다. 또한, 스택은 다른 복잡한 알고리즘, 예를 들어 깊이 우선 탐색(DFS)에서도 중요한 역할을 한다.

import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println("Stack: " + stack);

        int removedElement = stack.pop();
        System.out.println("Popped element: " + removedElement);
        System.out.println("Stack after pop operation: " + stack);

        int peekedElement = stack.peek();
        System.out.println("Peeked element: " + peekedElement);
        System.out.println("Stack after peek operation: " + stack);

        boolean isEmpty = stack.isEmpty();
        System.out.println("Is stack empty? " + isEmpty);
    }
}

Integer 타입의 Stack 객체를 생성하고, push 메소드를 사용하여 스택에 원소를 추가하고, pop 메소드를 사용하여 가장 위의 원소를 제거하고, peek 메소드를 사용하여 가장 위의 원소를 확인하며, isEmpty 메소드를 사용하여 스택이 비어 있는지 확인한다.

728x90
반응형
LIST

'CS > 알고리즘' 카테고리의 다른 글

동적 계산법  (0) 2023.06.07
큐(Queue)  (0) 2023.06.07
이진 검색 트리(Binary Search Tree, BST)  (0) 2023.05.30
해싱(Hashing)  (0) 2023.05.30
이진 검색(Binary Search)  (0) 2023.05.30
728x90
반응형
SMALL

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

입출력 예

numbers return

[6, 10, 2] "6210"
[3, 30, 34, 5, 9] "9534330"
package LV2;

import java.util.Arrays;
import java.util.Comparator;

public class H42746 {
    public String solution(int[] numbers) {
        // 숫자를 문자열로 변환
        String[] result = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            result[i] = String.valueOf(numbers[i]);  // 정수를 문자열로 변환하여 저장
        }

        // 정렬
        Arrays.sort(result, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // 두 문자열을 앞뒤로 이어 붙인 두 경우를 비교하여 더 큰 숫자 순서로 정렬
                return (o2 + o1).compareTo(o1 + o2);
            }
        });

        // 0만 여러 개 있는 경우에 대한 처리
        if (result[0].equals("0")) {  // 가장 큰 수가 '0'이라면 전체가 0이므로 "0"을 반환
            return "0";
        }

        String answer = "";
        for (String str : result) {
            answer += str;  // 정렬된 문자열을 이어붙여 결과 생성
        }

        return answer;  // 결과 반환
    }
}

문자열을 비교할 때 **(o2 + o1).compareTo(o1 + o2)**를 사용하여 두 문자열을 이어붙였을 때 어느 경우가 더 큰지 비교하고 있다. 이렇게 하면 숫자를 이어붙였을 때 가장 큰 수를 만들 수 있는 순서로 정렬할 수 있다.

728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.2' 카테고리의 다른 글

숫자 변환하기  (1) 2023.06.12
뒤에 있는 큰 수 찾기  (0) 2023.06.12
다리를 지나는 트럭  (0) 2023.06.07
2 x n 타일링  (0) 2023.06.07
모음사전  (0) 2023.06.07

+ Recent posts