✔ 입국심사 [프로그래머스 43238] 문제 분석하기 전체 인원 입국에 걸리는 시간의 최소와 최대를 이진 탐색의 인덱스로 설정한 후 이진 탐색을 하며 시간 안에 모든 인원을 처리할 수 있는지 계산 걸리는 시간을 계속해서 이진 탐색하면서 최소 시간을 구함 손으로 풀어보기 이진탐색을 위해 데이터 정렬 걸리는 시간의 최소와 최대를 찾기 최소 : 0은 시작 인덱스 최대 : 가장 길게 걸리는 심사관의 시간 * n명은 종료 인덱스 이진 탐색 시작 인덱스 > 종료 인덱스일 때까지 수행 중앙값 크기로 모든 입국이 가능하다면 종료 인덱스 = 중앙값 - 1 중앙값 크기로 모든 입국이 불가능하다면 시작 인덱스 = 중앙값 + 1 최소 시간 반환 슈도코드 작성하기 n(입국 인원수) times(심사관마다 걸리는 시간) answe..
✔ 타겟 넘버 [프로그래머스 43165] 문제 분석하기 이전 노드의 합에 현재 노드의 값을 빼거나 더하는 경우로 깊이 우선 탐색을 진행한 후 마지막 합의 값과 타겟 값이 일치할 경우 타겟 넘버를 만드는 방법의 수를 증가 손으로 풀어보기 깊이 우선 탐색을 진행 현재 노드의 값을 빼거나 더하는 경우로 진행 마지막 노드까지 진행했을 때 합의 값과 타겟 값이 일치할 경우 타겟 넘버를 만드는 방법의 수를 증가 numbers의 길이와 탐색 깊이가 같다면 마지막까지 수행한 것 타겟 넘버를 만드는 방법의 수 반환 슈도코드 작성하기 numbers(사용할 수 있는 숫자가 담긴 배열) target(타겟 넘버) answer(타겟 넘버를 만드는 방법의 수) dfs(numbers, 0, target, 0) 수행 dfs(numbe..
✔ N으로 표현 [프로그래머스 42895] 문제 분석하기 최솟값이 8보다 크면 -1을 리턴하므로 동적 테이블을 5를 1, 2, 3, 4, 5, 6, 7번 사용으로 정하도록 함 사용 횟수 연산 1번 N 1개로 만든 숫자 5 2번 N 1개로 만든 숫자 (+, -, *, /) N 1개로 만든 숫자 + N 2개로 만든 숫자 5 + 5 = 10 5 - 5 = 0 5 * 5 = 25 5 / 5 = 1 55 3번 N 1개로 만든 숫자 (+, -, *, /) N 2개로 만든 숫자 + N 2개로 만든 숫자 (+, -, *, /) N 1개로 만든 숫자 + N 3개로 만든 숫자 5 + 10 = 15 5 - 10 = -5 5 * 10 = 50 5 / 10 = 0.5 ... 10 + 5 = 15 10 - 5 = 5 10 * 5..
✔ 체육복 [프로그래머스 42862] 문제 분석하기 여벌을 가진 사람이 도난당했을 경우 빌려줄 수 없으므로 빌려줄 수 있는 배열에서 제거 그 후, 자신의 앞 뒤 사람으로부터 빌릴 수 있는지 확인 빌릴 수 있다면 빌린 후 빌린 사람가 빌려준 사람을 -1로 변경 손으로 풀어보기 순차적으로 비교 탐색할 수 있도록 도난당한 학생들과 빌려줄 수 있는 학생들의 배열을 정렬 여벌을 가진 사람이 도난당했을 때를 찾아 빌려줄 수 없도록 변경 본인이 사용해야 하므로 다른 학생들에게 빌려줄 수 없으므로 lost와 reserve를 -1 처리 이때 lost를 0으로 처리할 경우 이후 lost[i] + 1 = 1이 되어 reserve에 1이 있다면 이중으로 처리될 수 있으므로 -1로 처리 체육복을 빌릴 수 있는지 비교 탐색 빌릴..
✔ 최소직사각형 [프로그래머스 86491] 문제 분석하기 눕혀 수납할 수 있으므로 명함에 대한 가로 길이를 가로 길이와 세로 길이 중 더 긴 것으로 swap할 수 있는 것이므로 각 명함 번호마다 최대 값은 가로 길이로, 최소 값은 세로 길이로 설정한 후 가로 길이와 세로 길이의 전체 최대 값을 찾아 지갑의 크기를 구함 손으로 풀어보기 모든 명함을 탐색하면서 현재 명함의 가로 길이와 세로 길이를 설정 최대 값은 가로 길이 최소 값은 세로 길이 최대 가로(세로) 길이와 현재 가로(세로) 길이를 비교하여 더 큰 것으로 갱신 최대 가로 길이 * 최대 세로 길이 반환 슈도코드 작성하기 sizes(모든 명함의 가로 길이와 세로 길이) width(최대 가로 길이) height(최대 세로 길이) for(sizes만큼)..
✔ K번째수 [프로그래머스 42748] 문제 분석하기 배열을 복사한 후 정렬하여 i번째 숫자와 j번째 사이에 있는 k번째 수를 구하도록 함 손으로 풀어보기 배열의 i번째 숫자부터 j번째 숫자까지를 복사 복사한 배열을 정렬한 후 k번째 수를 정답 배열에 저장 정답 배열 리턴 슈도코드 작성하기 array(숫자 배열) commands(i, j, k가 담긴 배열) answer(정답 배열) for(commands만큼) { temp(임시 배열) = Arrays.copyOfRange(array, 복사 시작 인덱스, 복사 끝 인덱스) temp 정렬 정답 배열에 저장 } 정답 배열 반환 코드 구현하기 /** * 42748) K번째수 */ public class K001_42748 { // array(숫자 배열) // c..
✔ 더 맵게 [프로그래머스 42626] 문제 분석하기 가장 낮은 두 개의 음식을 골라야 하므로 힙을 구현한 우선순위 큐를 사용하여 음식들을 정렬하는 방식으로 문제에 접근 우선순위 큐에 객체를 추가 인자 없이 생성하면 Min Heap으로 동작하게 됨 // Min Heap PriorityQueue minHeap = new PriorityQueue(); // Max Heap PriorityQueue maxHeap = new PriorityQueue(Collections.reverseOrder()); // 그 외에 다른 객체에 따라 정렬할 경우 Comparable의 compareTo() 구현 손으로 풀어보기 우선순위 큐에 음식을 저장 가장 스코빌 지수가 낮은 두 개의 음식을 골라 새로운 음식을 만들고 저장 모든..
✔ 같은 숫자는 싫어 [프로그래머스 12906] 문제 분석하기 스택/큐를 사용하여 원소를 집어 넣은 후, 바로 앞에 존재하는 원소일 경우 스택/큐에 집어 넣지 않도록 함 손으로 풀어보기 스택/큐에 원소를 집어 넣음 바로 앞에 존재하는 원소일 경우 스택/큐에 집어 넣지 않도록 함 스택/큐 리턴 슈도코드 작성하기 arr(숫자 0부터 9까지로 이루어져 있는 원소들) stack(원소를 담을 stack) for(arr의 크기만큼) { if(stack에 원소가 존재하지 않을 경우) stack에 원소 추가 } stack 리턴 arr(숫자 0부터 9까지로 이루어져 있는 원소들) queue(원소를 담을 queue - Deque 자료구조를 이용하여 구현) for(arr의 크기만큼) { if(queue에 원소가 존재하지 않..