[Java] 백준 2667 : 단지번호붙이기 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 입력해야하는 값이 아래와 같이 주어진다. 7 0110100 0110101 1110101 0000111 0100000 0111110 0111000 첫째줄은 지도의 크기 N이며, 그 다음 N줄에는 N개의 자료가 입력된다. 위의 정보를 토대로 NxN 크기의 map을 먼저 만들어야 한다. 각 행마다 하나의 문자열을 받는다고 가정하면, 0번 행에는 '0110100'이라는 문자열을 분리하여 각각의 행에 정수로 치환한 값을 할당해야..
[Java 자료구조] DFS, BFS 1. DFS(Depth-First Search) 깊이 우선 탐색 스택을 사용 1. 탐색 시작 노드를 스택에 삽입하고 방문처리한다. 2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문처리하고, 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 3. 모든 노드가 한번씩 방문되었으면 종료한다. 그래프의 노드 1을 시작 노드로 설정하여 DFS를 이용해 탐색 인접한 노드 중에서 방문하지 않은 노드가 여러 개 있으면 번호가 낮은 순서부터 처리한다. 방문 처리된 노드는 회색으로, 현재 처리중인 스택의 최상단 노드는 하늘색으로 표현한다. step1. 시작 노드 '1'을 스택에 삽입하고 방문 처리 step2. 스택의 최상단 ..
우선순위 큐 Java에서 우선순위 대기열을 구현하려면 우선순위 대기열 데이터 구조의 내장 구현인 java.util.PriorityQueue 클래스를 사용할 수 있습니다. PriorityQueue 클래스는 Java Collections Framework의 일부이며 우선순위 큐의 힙 기반 구현을 제공합니다. import java.util.PriorityQueue; import java.util.Comparator; 우선 순위 대기열은 자연 순서(Comparable 인터페이스를 구현하는 경우) 또는 사용자 정의 비교기를 사용하여 요소를 정렬합니다. 사용자 지정 주문을 정의하려면 Comparator 구현을 만들어야 합니다. 우선 순위 대기열에 저장하려는 요소가 사용자 정의 클래스인 경우 해당 클래스에서 Comp..
04: 큐, 덱 https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는..
[Java] 백준 2504 : 괄호의 값 난이도 🥈실버1 https://www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X www.acmicpc.net ‘()’ 인 괄호열의 값은 2이다. ‘[]’ 인 괄호열의 값은 3이다. ‘(X)’ 의 괄호값은 2×값(X) 으로 계산된다. ‘[X]’ 의 괄호값은 3×값(X) 으로 계산된다. 올바른 괄호열 X와 Y가 결합된 XY의 괄호값은 값(XY)= 값(X)+값(Y) 로 계산된다. 접근1 (()[[]])([]) (()[[]]) -> 2*(2 + (3..
01: 연결리스트 1. 연결리스트란? 연결 리스트(LinkedList)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조입니다. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당합니다. Node는 LinkedList에 객체를 추가하거나 삭제하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않습니다. 중간에 데이터를 추가나 삭제하더라도 전체의 인덱스가 한 칸씩 뒤로 밀리거나 당겨지는 일이 없기에 ArrayList에 비해서 데이터의 추가나 삭제가 용이하나, 인덱스가 없기에 특정 요소에 접근하기 위해서는 순차 탐색이 필요로 하여 탐색 속도가 떨어진다는 단점이 있습니다. 그러므로 탐색 또는 정렬을 자주 하는 경우엔 배열을 사용하고 데이..