안녕하세여 호호만두에요
이번에 풀어본 문제는 프로그래머스 코딩테스트 연습문제에요
level2로 분류된 문제로 그리 어렵지 않은 문제입니다.
level 낮은 것 부터 차례차례 풀어보고 있어요
프로그래머스는 백준과 다르게 세션 만료로 자꾸 로그아웃 되지 않아서 편하네요 ㅎㅎ
자동으로 로그인 되어있구요
그리고 백준보다 환경이 더 깔끔하고 코드도 실행해볼 수 있어서 더 편한것 같습니다
아무튼!!! 스택/큐의 탑 문제를 풀어봅시다!!
저는 이 문제를 스택이나 큐를 사용하지 않고 풀었습니다.
가장 오른쪽 인덱스 부터 더 큰 수가 나올때 까지 탐색하면 됩니다.
예를 들어 높이가 {6,9,5,7,4}라고 합시다.
그러면 맨 오른쪽 탑의 높이는 4입니다. 여기서 왼쪽으로 가면서 큰 탑을 찾습니다.
다음 4번째 탑이 7로 크므로 4번째 탑이 신호를 받게됩니다. 즉 index보다 1큰 수 입니다.
그리고 이제 한가지만 하면 됩니다. 왼쪽에 더 큰 탑이 없어서 아무 탑도 수신하지 못하는 경우입니다.
이 경우는 check 변수를 두어서 계산합니다. 값이 크지 않은 경우 check 값을 증가시킵니다.
이렇게 해서 왼쪽 탑의 개수와 check 값이 같다면 모두 크지 않아서 check 값이 증가한 것임으로
수신할 탑이 없다는 뜻이 됩니다. 그러면 0으로 값을 넣어주면 됩니다.
그리고 첫 번째 탑은 맨 왼쪽에 있어서 수신할 탑이 없으므로 무조건 0이 됩니다.
이 내용을 바탕으로 아래에 코드를 작성하였습니다.
자세한 풀이와 코드는 git hub에도 있습니다!!
https://github.com/wlgh325/Programmers_algorithm/tree/master/Level2/%ED%83%91
<프로그래머스 탑 자바(java) 풀이>
class Solution{
public int[] solution(int[] heights) {
int len = heights.length;
int[] answer = new int[len];
for (int i = len-1; i > 0 ; i--) {
int idx = 0;
int check = 0;
for (int j = i-1; j >= 0; j--) {
if(heights[j] > heights[i]){
idx = j + 1;
break;
}
else{
check++;
}
}
if(check == i)
answer[i] = 0;
else
answer[i] = idx;
}
answer[0] = 0;
return answer;
}
}