본문 바로가기

코테38

백준 2018번: 수들의 합 5 - Java 시작점을 오른쪽으로 이동시키면 항상 합이 감소하고,끝점을 오른쪽으로 이동시키면 항상 합이 증가한다는 것을 알 수 있다.package java_0626_twoPointer;import java.util.*;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] arr = new int[N+1]; // 1부터 N까지 들어있는 배열 for (int i = 1; i N을 입력받고, 1~N까지 순차적으로 들어있는 배열을 만든다.시작점과 끝점을 모두 맨 앞으로 위치시키고, 시작점.. 2024. 6. 26.
백준 9372번: 상근이의 여행 - Java import java.util.Scanner;public class Main { public static int T; // 테스트 케이스 개수 public static int n, m; // 나라 n개, 비행기 m public static int[] parent = new int[1000001]; // 부모 테이블 초기화하기 public static int result = 0; // 특정 원소가 속한 집합을 찾기 public static int findParent(int x) { // 루트 노드가 아니라면, 루트 노드를 찾을 때까지 재귀적으로 호출 if (x == parent[x]) return x; return parent[x] = findP.. 2024. 6. 26.
백준 1647: 도시 분할 계획 - Java 크루스칼 알고리즘가능한 한 최소한의 비용으로 신장 트리를 찾는 것1. 간선 데이터를 비용에 따라 오름차순 정렬2. 간선을 하나씩 확인하며 현재의 간선이 사이클을 발생시키는지 확인- 사이클이 발생하지 않는. 경우 최소 신장 트리에 포함- 사이클이 발생하는 경우 최소 신장 트리에 포함시키지 않음.3. 모든 간선에 대하여 2번의 과정 반복package java_0626_크루스칼;import java.util.*;class Edge implements Comparable { private int distance; // 비용 private int nodeA; // 시작점 private int nodeB; // 종료점 public Edge(int distance, int nodeA, int n.. 2024. 6. 26.
백준 1717번: 집합의 표현 - Java 유니온 파인드(Union Find)여러 노드가 있을 때 특정 2개의 노드를 연결해 1개의 집합으로 묶는 union 연산과 두 노드가 같은 집합에 속해 있는지를 확인하는 find 연산으로 구성되어 있는 알고리즘 union 연산 : 각 노드가 속한 집합을 1개로 합치는 연산find 연산 : 특정 노드 a에 관해 a가 속한 집합의 대표 노드를 반환하는 연산import java.util.*;public class Main { // 노드의 개수(V)와 간선(Union 연산)의 개수(E) // 노드의 개수는 최대 100,000개라고 가정 public static int n, m; public static int[] parent = new int[1000001]; // 부모 테이블 초기화하기 .. 2024. 6. 26.
백준 1541 잃어버린 괄호 - 파이썬 import sysinput = sys.stdin.readlineexp = input().rstrip().split('-') arr = []for i in range(len(exp)): temp = 0 for t in exp[i].rstrip().split('+'): temp += int(t) arr.append(temp)res = arr[0]for a in arr[1:]: res -= aprint(res) 최솟값을 찾는 기준을 잘 모르겠어서 고민하다가 검색해서 알아낸 , , 답 괄호를 적절히 쳐서 값을 최소로 만드는 방법은, 핵심적으로 '-' 연산자를 기준으로 나누는 것이렇게 하면 '-' 연산자를 기준으로 나눠진 부분들을 먼저 더한 후, 마지막에 뺄셈을 수행하여 값을 최소화할 수 있음 .. 2024. 6. 25.
백준 10816 숫자 카드 2 - 파이썬 import sysinput = sys.stdin.readlinefrom collections import CounterN = int(input())Narr = list(map(int, input().split()))Narr.sort()M = int(input())Marr = list(map(int, input().split()))isTrue = False# Counter를 사용하여 각 요소의 개수를 미리 셈count_dict = Counter(Narr)countArr = [0] * Mfor i in range(M): pl = 0 pr = N - 1 while(pl 바로 이전 포스팅 수 찾기와 비슷하게 이진탐색을 활용해서 풀었다.그 전과 다른 점은 각 수가 적힌 카드의 개수를 세는 것이었는데 처음에.. 2024. 6. 25.