[Programmers] - 더 맵게 (JAVA)[Programmers] - 더 맵게 (JAVA)1. 문제 접근해당 문제는 음식의 스코빌지수가 적힌 배열이 주어졌을 때, 음식을 주어진 규칙에 따라 섞은 뒤 모든 음식의 스코빌 지수가 `K`이상이 되도록 할 때 섞는 횟수를 반환하면되는 간단한 문제다. 음식을 섞는 공식은 아래와 같다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) 따라서 주어진 스코빌지수 배열에서 순차적으로 가장 맵지 않은(스코빌지수가 가장 낮은) 음식을 2개씩 꺼내가며 확인하면 되는데, 주어지는 스코빌 지수 배열의 길이는 1,000,000으로 완전탐색으로 접근하면 시간초과가 발생한다. 따라서 Min Heap 자료구조..
[Programmers] - 큰 수 만들기 (JAVA)[Programmers] - 큰 수 만들기 (JAVA)1. 문제 접근해당 문제는 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하면된다. 처음 문제를 접근하였을 때는 이중 for문을 최적화하여 풀고자하였다. number는 2자리 이상, 1,000,000자리 이하인 숫자입니다. 위 조건에 따라 완전 탐색을 진행할 수 없다고 판단하여, 수학적으로 `answer`배열의 검사 위치를 최적화하여 풀고자하였다. 주어진 예시인 "4177252841"를 바탕으로 `answer` 배열의 변화를 간략하게 살펴보면 초기상태 ------ `chkStartIdx = 0` / `currNum = 4` 4----- `chkStartIdx = 0` / `..
[Programmers] - 혼자 놀기의 달인 (JAVA)[Programmers] - 혼자 놀기의 달인 (JAVA)1. 문제 접근해당 문제는 정수형 `cards` 배열이 주어졌을 때, 카드 수가 최대가 되는 그룹 2개를 찾은 후 두 그룹의 카드 수를 곱한 값을 반환하면된다. 임의의 상자(`cards[idx]`)를 하나 선택한 뒤, 해당 값의 위치의 있는 또 다른 상자(`cards[cards[idx]]`)를 열고 반복하며 하나의 카드 그룹을 구성하게되는데, 열어야 하는 상자가 이미 열려있을 때까지 반복한다. 해당 문제의 흐름에서 하나의 상자가 다른 상자를 탐색하게 한다는 것을 바탕으로 그래프 탐색을 사용하여 접근해야겠다는 생각을 하였다. cards에는 중복되는 원소가 존재하지 않습니다 위 조건을 통해 모든..
[Programmers] - 연속 부분 수열 합의 개수 (JAVA)[Programmers] - 연속 부분 수열 합의 개수 (JAVA)1. 문제 접근해당 문제는 주어진 원형 수열에 대해 도출될 수 있는 연속 부분수열 합의 개수를 구하면 되는 간단한 문제다. 몇가지 고려할 사항이 있다면, 해당 수열은 원형 수열로 주어지므로 `front` 인덱스와 `rear` 인덱스의 대소가 뒤바뀔 수 있다는 점과 중복된 값을 제외하고 개수를 반환해야한다는 점이다. 먼저 중복을 제거하기 위해서는 간단히 `Set`을 사용하였으며, 부분수열의 합을 구한 뒤 `add`하여 중복을 제거하고, 집합의 size를 반환하도록하였다. 두번째 고려사항인 원형수열에 대해서는 idx = (idx + 1) % N;...// front, rear ..