10. 마구간 정하기(결정 알고리즘)
·
자바 알고리즘 문제풀이/Sorting and Searching(정렬, 이분검색, 결정알고리즘
1. 문제 N개의 마구간이 수직선상에 있습니다. 각 마구간은 x1, x2, x3, ......, xN의 좌표를 가지며, 마구간간에 좌표가 중복되는 일은 없습니다. 현수는 C마리의 말을 가지고 있는데, 이 말들은 서로 가까이 있는 것을 좋아하지 않습니다. 각 마구간에는 한 마리의 말만 넣을 수 있고, 가장 가까운 두 말의 거리가 최대가 되게 말을 마구간에 배치하고 싶습니다. C마리의 말을 N개의 마구간에 배치했을 때 가장 가까운 두 말의 거리가 최대가 되는 그 최대값을 출력하는 프로그램을 작성하세요. 2 - 1. 나의 풀이 풀지 못함 3 - 1. 강의 풀이 결정 알고리즘은 답의 범위를 lt와 rt로 나타내고 그 안에서 이분 탐색으로 답의 범위를 좁혀가면서 최적의 값을 찾아내는 방식이다. 3 - 2. 강의 ..
9. 뮤직비디오 (결정 알고리즘)
·
자바 알고리즘 문제풀이/Sorting and Searching(정렬, 이분검색, 결정알고리즘
1. 문제 DVD를 담을 수 있는 최소 용량 크기(length)를 출력하세요. N은 곡의 개수 M은 곡을 담을 DVD의 수 다음줄에는 N개 각각 곡의 길이 2 - 1. 나의 풀이 최소 용량 크기(length)를 맨 처음 1이라고 가정하면서 최소 용량 크기 (length) 를 1씩 더해서 계속 검증 1. sum에 곡의 길이를 누적합 한다. 2. sum += arr[i]를 하고 최소 용량의 크기보다 크면 M과 비교할 변수 count를 +1 하고 sum을 arr[i]로 바꾼다. 3. sum이 m 보다 크면 이번 반복문에서 설정한 최소 용량의 크기는 부족하므로 break; 하고 최소 용량 크기를 +1 한다. 4. 반복문이 끝나면 count+1을 해줘야한다. 이유는 맨 마지막 값을 누적합하고 for문이 끝났을 때..
8. 이분 검색
·
자바 알고리즘 문제풀이/Sorting and Searching(정렬, 이분검색, 결정알고리즘
1. 문제 정렬후 숫자 M 이 몇번째에 있는지 이분 검색으로 찾으시오. 2 - 1. 나의 풀이 이분 검색이 먼지는 모르겠고 일단 for문 0부터 arr.length까지 돌려서 찾아 풀었다. 이분 검색을 사용하지 않아서 틀린거나 다름없다. 3 - 1. 강의 풀이 이분 검색은 중앙값을 정한 다음, M과 비교하면서 중앙값을 갱신해나가는 풀이이다. 이 설명만 듣고 코드를 짜서 풀었다. 3 - 2. 강의 코드 package Sort; import java.util.*; public class Sort08_binaray { public static int solution(int[] arr, int m) { int answer = 0; Arrays.sort(arr); int lt = 0, rt = arr.length..
★7. 좌표 정렬
·
자바 알고리즘 문제풀이/Sorting and Searching(정렬, 이분검색, 결정알고리즘
1. 문제 좌표 (x, y)가 주어지면 모든 좌표를 오름차순으로 정렬하는 프로그램을 작성하세요. x값이 같으면 y값에 의해 정렬한다. 2 - 1. 나의 풀이 그냥 for문으로 계속 비교해서 풀었다. 강의의 취지를 따르자 3 - 1. 강의 풀이 Comparable을 사용해서 정렬했다. Comparable과 Comparator 는 수가 아닌 사용자 지정의 기준을 정해서 정렬하게 만들어주는 방법인데, 이를 사용할 생각을 못했다. Comparable은 compareTo를 OverRide Comparator는 익명객체를 사용해 compare(T1, T2)를 OverRide한다. 리턴값이 양수이면 교환하고 음수이면 교환하지 않는다. 만약 T1 T2 10 20 이 상태에서 오름차순 정렬을 하고자 한다면 compare..
6. 장난꾸러기
·
자바 알고리즘 문제풀이/Sorting and Searching(정렬, 이분검색, 결정알고리즘
1. 문제 선생님은 키가 작은 학생부터 일렬로 세웠습니다. 철수는 짝꿍보다 키가 크고 앞 번호를 받고싶어 짝꿍과 자리를 바꿨슨비다. 철수와 짝꿍이 자리를 바꾼 반 학생들의 일렬로 서 있는 키 정보가 주어질 때, 철수가 받은 번호와 철수 짝꿍이 받은 번호를차례로 출력하는 프로그램을 작성. 2- 1. 나의 풀이 맨처음에는 정렬하는 과정에서 인덱스를 찾아 풀이하려고 했다. 계속 키가 같은 학생들이 있는 경우와 상충해서 오류가 났다. 고민을 하다가 그냥 아예 정렬 전과 정렬 후를 비교했을 때 다른 두가지 값이 답이 아닐까 라고 생각하고 코드를 짰다. 강의도 이렇게 풀었다. 아마 정렬하는 과정에서 답을 찾아 풀이하려는 경우에 막혀서 오답률이 높은 편인거 같다. 2 - 2. 나의 코드 package Sort; im..
5. 중복 확인
·
자바 알고리즘 문제풀이/Sorting and Searching(정렬, 이분검색, 결정알고리즘
1. 문제 학생들이 적은 숫자 중 중복된 값이 존재하면 D 아니면 U 출력 2 - 1. 나의 풀이 1. 해쉬맵: O(n) key = 수, value = 나온 수 로 생각하고 풀면 된다. 2. 이중 for문 말 그대로 이중 for문을 돌면 된다. 2 - 2. 나의 코드 HashMap을 사용한 풀이 package Sort; import java.util.*; public class Sort_05_HM { public static char solution(int[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = i+1; j < arr.length; j++) { if(arr[i]==arr[j]) return 'D'; } } return 'U'; } pu..
4. ★★ Least Recently Used (LRU)
·
자바 알고리즘 문제풀이/Sorting and Searching(정렬, 이분검색, 결정알고리즘
1. 문제 LRU: Least Recently Used 최근에 덜 사용된 것 즉 캐시에서 작업을 제거할 때 기즌은 가장 오랫동안 사용하지 않을 작업을 제거한다. 1. Cache Miss: 해야할 작업이 캐시에 없으면 모든 작업이 뒤로 밀리고 새로운 작업이 맨 앞에 위치한다. 2. Cache Hit: 해야할 작업이 캐시에 있으면 있는 작업을 맨 앞에 위치하고 기존의 위치까지 뒤로 민다. ex) 작업 3 사용시: 5 2 3 1 6 ㅡㅡ> 3 5 2 1 6 2 - 1. 나의 풀이 1. Cache Hit 인경우 2. Cache Miss 인경우 나눠서 그대로 코딩했다. 2- 2. 나의 코드 import java.util.*; public class Main { public static int[] solution(..
3. 삽입 정렬
·
자바 알고리즘 문제풀이/Sorting and Searching(정렬, 이분검색, 결정알고리즘
1. 문제 삽입 정렬 2. 나의 풀이 로직만 보고 풀려했는데 자꾸 꼬여서 그냥 강의를 봤다. 실제로 그림 그려가면서 i 와 j 의 위치만 생각하면 된다. 3. 강의 코드 package Sort; import java.util.*; public class Sort_03_insertion { public static int[] solution(int[] arr, int n) { for (int i = 1; i = 0; j--) { if (arr[j] > target) arr[j + 1] ..
2. 버블 정렬
·
자바 알고리즘 문제풀이/Sorting and Searching(정렬, 이분검색, 결정알고리즘
1. 문제 버블정렬 2. 나의 풀이 버블 정렬은 워낙 잘 알고있어서 그냥 풀었다. 버블 정렬은 i와 i+1의 대소비교를 해가며 swap을 하는 정렬로 j for문이 끝나면 가장 큰 값이 배열의 맨 뒤에 저장된다. 근데 시간 복잡도가 매우 높으니 사용하지 말라 들었다. 근데 교수님은 데이터가 적으면 써도 별 차이 안난다고....? 주의할 점은 for문 돌릴 때 조건문 만 생각하면 된다. 3. 강의 코드는 나와 같다. 쉬우니까... package Sort; import java.util.*; public class Sort_02_bubble { public static int[] solution(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (in..