본문 바로가기

Java/Java 알고리즘 인프런

해당 날짜의 날씨보다 따뜻한 날씨가 오는데 걸리는 기간

반응형

1. 이중for문

int len=tem.length;
int[] result=new int[len];
int count =0, j;
for(int i=0;i<len;i++) {
    for(j=i+1;j<len-1;j++) {
        if(tem[i]<tem[j]) {
            count++;
            break;
        }
        else
            count++;
    }
    if(j==tem.length) result[i]=0;
    else result[i]=count;

    count=0;
}

return result;

 

2. while문

int len = tem.length;
int[] result = new int[len];
int max=0;

for(int i=0;i<len;i++) {
    max=i;
    //제일 높았던 날짜를 max로
    while(max<=len-1 && tem[i]>=tem[max]) { //max가 주어진 날짜안이고
        max++;
        //i일 다음으로, 제일 높은 날짜
    }
    if(max<=len-1) result[i]=max-i; //걸리는 기간
    else result[i]=0;
}
return result;

 

3. stack 이용

int len=tem.length;
int[] result = new int[len];
Stack<Integer> stack = new Stack<>();
for(int i=0;i<len;i++) {
    while(!stack.isEmpty() && tem[stack.peek()]<tem[i]) {
        int index=stack.pop();
        result[index]=i-index;
    }
    stack.push(i);
    }
return result;
반응형