문제 풀이: 단순 반복문을 사용한 해결
배열의 전체 원소를 순회하며 문제를 해결합니다.
구현은 간단하지만 중첩 for 반복문으로 인해 일부 테스트케이스에서 timeout 오류가 발생합니다.
public class Solution
{
public int[] solution(int[] numbers)
{
for (int i = 0; i < numbers.length; ++i)
{
int src, trg;
src = trg = numbers[i];
for (int j = i; j < numbers.length; ++j)
{
trg = numbers[j];
if (src < trg) {
break;
}
}
numbers[i] = (src < trg) ? trg : -1;
}
return numbers;
}
}
코드 | 비고 | |
원소의 뒤에 이어지는 원소 중 |
문제 풀이: Stack 자료 구조를 사용한 풀이
배열의 가장 끝에서부터 전체 원소를 순회하며 문제를 해결합니다. 자신보다 크면서 가장 가까운 값을 찾는 과정은 Stack으로 구현 할 수 있습니다.
Stack에서 원하는 값을 찾을때까지또는Stack의 원소가 남아있는 동안반복합니다.- 원하는 값을 찾지 못하면
POP합니다(예시의 7과 8). - 원하는 값을 찾으면
PEEK합니다(예시의 10). - 과정이 끝나면 현재 값을
ADD합니다(예시의 9, Next Stack). 문제의 제약 사항에서 원하는 값을 찾지 못하면-1을 사용합니다.
예시에서 과정이 끝나면 9가 ADD됩니다. 그리고 과정이 진행되면서 비교 값보다 작은 7 8은 POP됩니다.
결과적으로 Stack을 사용해 미래에 참조할 필요없는 원소는 삭제하면서 오름차순으로 정렬된 상태를 유지합니다.
전반적인 과정은 다음과 같습니다.
전체 구현 코드는 다음과 같습니다.
import java.util.*;
public class Solution
{
public int[] solution(int[] numbers)
{
Stack<Integer> stack = new Stack<>();
for (int i = numbers.length - 1; i >= 0; --i)
{
int curr = numbers[i];
int prev = -1;
while (!stack.isEmpty())
{
if (curr < stack.peek()) {
prev = stack.peek();
break;
}
stack.pop();
}
numbers[i] = prev;
stack.add(curr);
}
return numbers;
}
}
코드 | 비고 | |
문제의 제약사항에 따라서 원하는 값을 찾지 못하면 |
||
원하는 값을 찾으면 Stack 순회를 종료합니다. | ||
원하는 값을 찾지 못할때마다 Stack을 |
||
원소 하나가 처리되면 Stack에 |
'Algorithm > Programmers' 카테고리의 다른 글
Level 2: 무인도 여행, BFS를 사용한 2차원 좌표계에서 고립된 영역 탐색 (0) | 2023.12.20 |
---|---|
Level 2: 미로 탈출, 두 개의 BFS 연결 (0) | 2023.12.19 |
Level 2: 요격 시스템, 하나의 축에서 최소한의 교집합 구하기 (0) | 2023.12.07 |
Level 1: 카드 뭉치, 배열의 큐잉(Queueing) (0) | 2023.12.06 |
Level 2: 광물 캐기, 그리디 알고리즘 (0) | 2023.12.05 |