본문 바로가기

728x90

프로그래머스(Java)/Level 3

(14)
[프로그래머스] N으로 표현 코드 힌트문제 개요:주어진 숫자 N을 최대 8번까지 사용하여 특정 숫자 number를 만들 수 있는 최소 사용 횟수를 계산합니다.덧셈, 뺄셈, 곱셈, 나눗셈과 같은 연산을 반복적으로 수행하며 최적의 해를 찾습니다.초기화:N을 사용하여 만들 수 있는 모든 숫자를 HashMap에 초기화하고, 각 숫자를 만들기 위해 필요한 최소 사용 횟수를 저장합니다.재귀적 연산:N을 사용하여 가능한 모든 연산을 수행하고, 결과를 HashMap에 기록합니다.이미 계산된 숫자의 경우 더 적은 횟수로 동일한 숫자를 만들 수 있는지 확인하여 업데이트합니다.8번 이상의 연산은 의미가 없으므로 재귀 깊이를 제한합니다.최종 결과:HashMap에서 목표 숫자 number에 대한 최소 연산 횟수를 찾아 반환합니다.만약 목표 숫자를 만들 수..
[프로그래머스] 야근 지수 코드 힌트작업의 균등한 감소:문제에서 목표는 배열의 각 요소를 제곱하여 그 합을 최소화하는 것입니다. 이를 위해 가장 큰 요소를 중심으로 작업량을 줄여야 합니다.예를 들어 [4, 3, 3]에서 n = 4일 때, 가능한 한 균등하게 작업량을 줄여 [2, 2, 2]와 같이 만드는 것이 중요합니다. 이렇게 해야 제곱값의 합이 최소화됩니다.배열 정렬:작업량을 줄이기 위해서는 배열을 정렬하여 현재 최댓값을 쉽게 찾을 수 있어야 합니다. Arrays.sort()를 사용하면 배열이 오름차순으로 정렬되며, 최댓값이 항상 배열의 마지막에 위치합니다.하지만 매번 Arrays.sort()를 호출하면 시간 복잡도가 O(n log n)이 되어 효율성 문제가 발생할 수 있습니다. 따라서 전체 배열을 매번 정렬하는 대신, 최댓값이..
[프로그래머스] 단어 변환 코드 힌트BFS 접근 방법:큐 사용:큐를 사용하여 탐색을 수행합니다. 큐에는 현재 단어와 변환 단계 수를 함께 저장합니다.현재 단어와 단계 수를 큐에서 꺼내어 처리하고, 다음 단계로 넘어갈 때는 새 단어와 단계 수를 큐에 추가합니다.Queue queue = new LinkedList();queue.add(new Node(currentWord, currentStep));while (!queue.isEmpty()) { Node node = queue.poll(); // 처리 코드}방문 기록:방문 기록 배열을 사용하여 이미 방문한 단어를 체크합니다. 이는 중복된 탐색을 방지하고, 효율적으로 탐색할 수 있도록 도와줍니다.방문한 단어는 큐에 다시 추가되지 않도록 합니다.boolean[] visited ..
[프로그래머스] 네트워크 코드 힌트:그래프 탐색의 필요성:각 컴퓨터를 노드로 보고, 컴퓨터 간의 연결을 간선으로 생각하면, 네트워크의 수를 찾는 문제는 그래프에서 연결 요소의 수를 찾는 문제로 볼 수 있습니다.깊이 우선 탐색(DFS) 또는 너비 우선 탐색(BFS):한 컴퓨터에서 시작해 연결된 모든 컴퓨터를 탐색하고, 이미 탐색한 컴퓨터는 다시 탐색하지 않도록 표시합니다.새로운 컴퓨터에서 탐색을 시작할 때마다 새로운 네트워크가 하나 발견됩니다.방문 여부를 기록하는 배열:배열을 사용해 각 컴퓨터가 이미 탐색된 네트워크에 포함되어 있는지를 기록합니다.정답은 더보기 클릭더보기import java.util.*;class Solution { public int solution(int n, int[][] computers) { ..
[프로그래머스] 정수 삼각형 문제 힌트문제 이해:주어진 삼각형의 맨 위에서 시작하여 아래로 내려가면서 합이 최대가 되는 경로를 찾아야 합니다.각 경로의 합은 이동 경로의 숫자를 모두 더한 값입니다.동적 계획법 적용:동적 계획법을 사용하여 부분 문제를 해결함으로써 전체 문제를 해결합니다.여기서는 각 경로의 최대 합을 구할 때, 이전 단계의 계산 결과를 이용합니다.bottom-up 접근:삼각형의 맨 아래에서부터 시작하여 위로 올라가면서 각 위치에서의 최대 합을 계산합니다.이 접근 방식은 각 단계에서 최적 부분 구조를 활용할 수 있도록 합니다. 정답은 더보기 클릭더보기class Solution { public int solution(int[][] triangle) { // 동적 계획법을 위한 bottom-up 방..
[프로그래머스] 이중우선순위큐 코드 힌트값을 담을 자료구조 선택하기:이중 우선순위 큐는 최댓값과 최솟값을 효율적으로 삽입 및 삭제할 수 있는 자료구조를 사용해야 합니다.PriorityQueue는 힙(Heap) 구조를 사용하여 요소를 정렬하고, 최소값을 빠르게 찾을 수 있습니다.최댓값을 빠르게 찾기 위해 Collections.reverseOrder()를 사용하여 내림차순 정렬된 PriorityQueue를 추가로 사용합니다.다른 자료 구조도 사용이 가능합니다명령어 처리:명령어가 I (삽입) 인 경우, 주어진 값을 두 개의 PriorityQueue에 추가합니다.명령어가 D (삭제) 인 경우, 다음을 처리합니다:D 1: 최댓값을 삭제합니다.D -1: 최솟값을 삭제합니다.PriorityQueue에서 요소를 제거할 때, 각 큐에서 해당 요소를 ..

728x90