Loading...

자바 자료구조 우선순위 큐 심화응용 - 내가 원하는 우선순위에 맞는 우선순위 큐를 만드는 방법

1. 원하는 우선순위 기준에 맞는, 우선순위 큐 만들기 [(1, 7), (3, 2), (3, 1), (6, 2)] 와 같이 2차 평면상의 점들의 위치가 순서대로 주어졌을 때, 각각의 점의 위치가 주어질 때 마다 지금까지 주어진 점들 중 x, y의 곱이 가장 큰 경우를 출력하는 프로그램을 작성해보세요. 위와 같은 문제는 어떻게 해결할 수 있을까? 무작정 코드를 작성한다면 점의 위치가 주어질때마다, x*y를 계산하여 최대가 되는 경우를 골라야하므로, $O(N^{2})$이 된다. 하지만 PriorityQueue를 이용한다면 순간 최댓값을 찾는 과정이 O(logN)이 되어, 시간복잡도가 O(NlogN)이 된다. 그런데, 우선순위 큐를 어떻게 만들어야할까? 두 수의 곱이 최대가 되는 특별한 경우를 원하므로, 이..

자바에서 배열의 한 원소로 튜플을 활용하고 싶다면..

1. 문제 양의 정수를 원소로 갖는 길이가 N인 수열이 입력으로 주어졌을 때, 이 수열을 오름차순으로 정렬 했을 때 각각의 위치에 있던 원소가 어느 위치로 이동하는지 출력하는 코드를 작성 2. 풀이 배열을 정렬할때, 배열의 index도 동시에 움직여야하는데, 배열은 index랑 값을 동시에 활용할 수 없으니(동적 배열은 될 것 같기도하고...??) 배열의 값과 index를 동시에 가지는 새로운 클래스를 직접 정의하고 해당 클래스를 원소로 가지는 배열을 정렬하여 각 index가 정렬한 배열에서 어디에 위치하고 있는지 새로운 배열에 저장한 다음에 출력 import java.util.Scanner; import java.util.Arrays; class Tuple implements Comparable { i..

자바 초보부터 B형까지 - 다양한 기준으로 정렬하기 위한 객체정렬 배우기

1. custom comparator 국어, 영어, 수학 점수를 포함한 학생 5명의 정보가 주어질때, 국어 점수를 기준으로 오름차순 정렬하는 방법은? 자바에서는 custom comparator로 직접 만들어야한다 반환 타입이 반드시 int여야하며, 정렬을 위한 객체 class를 타입으로 하는 1개의 인자를 가지고 있어야한다. 정렬을 위한 객체 뒤에 implements Comparable을 붙이고 public int compareTo 함수를 해당 class 안에 override annotator와 함께 적어준다. class Student implements Comparable { int kor, eng, math; public Student(int kor, int eng, int math){ this.ko..

[Java]그리디 알고리즘 - 배열에서 2개씩 짝지을때 합의 최댓값이 최소가 되게할려면

1. 문제 """ 2 * N개의 숫자가 주어졌을 때, 겹치지 않으면서 2개의 원소가 하나의 그룹을 이루도록 하여 총 N개의 그룹을 만드려고 합니다. 적절하게 그룹을 만들어 각 그룹에 있는 원소의 합 중 최댓값이 최소가 되도록 하는 프로그램을 작성해보세요. 예를 들어 N = 2, 주어진 원소가 3, 5, 5, 2 였을 때 그룹을 [5, 5], [3, 2]로 나눈다면 각 그룹에 있는 원소의 합은 순서대로 10, 5 이므로 이 중 최댓값은 10이 됩니다. 만약 그룹을 [3, 5], [5, 2]로 나눈다면 각 그룹에 있는 원소의 합은 순서대로 8, 7 이 되므로 이 중 최댓값은 8이 되며 이보다 최댓값을 더 작게 만들 수는 없습니다. """ 2. 풀이 항상 문제부터 똑바로 이해해야돼 2N개의 숫자를 N개 N개씩..

자바 초보부터 B형까지 - 자바에서 정렬을 하는 기본적인 방법들 -

1. Arrays.sort() import java.util.Arrays; Arrays.sort(arr)은 배열 arr을 오름차순 정렬 import java.util.Arrays; public class Main{ public static void main(String[] args){ int[] arr = new int[]{12,41,37,81,19,25,60,20}; Arrays.sort(arr); for(int i = 0; i < 8; i++){ System.out.print(arr[i] + " "); //12, 19, 20, 25, 37, 41, 60, 81 } } } 2. 부분정렬 특이하게 구간 인덱스를 명시하면 해당 구간만 정렬해줄 수도 있다 Arrays.sort(arr,시작 index, 끝 i..

2023. 1. 29. 19:40

문자열 정렬할 때 실수하기 쉬운부분 복기하기 -줄서기-

1. 문제 17178번: 줄서기 (acmicpc.net) 17178번: 줄서기 아이즈원의 팬인 시온이는 드디어 티켓팅에 성공하여 콘서트를 갔다. 콘서트장에 일찍 도착한 시온이는 기대하며 입장을 위해 줄을 섰다. 하지만 아이즈원의 인기대로 시온이를 포함한 많은 www.acmicpc.net 2. 풀이 문제를 읽어보면서 구조를 잘 생각해보면.. n개의 줄에 다섯명씩 있는데 앞 사람부터 입구에 입장을 할건데 티켓 순서대로 입장을 수행한다 근데 티켓 순서는 알파벳이 사전 순서대로, 그리고 숫자가 작은 순서대로가 먼저 오는것이다 입장을 하는데 내 순서가 아니면 대기줄에서 들어갈 순서가 맞는 사람인지 검사해서 들어갈 사람이면 보내주고 그래도 들어갈 사람이 없으면 현재 대기줄이 아닌 사람은 대기공간에 들어가야할 것이다..