Problem: Buildings receiving sunlight

Given are the heights of certain Buildings which lie adjacent to each other. Sunlight starts falling from left side of the buildings. If there is a building of certain Height, all the buildings to the right side of it having lesser heights cannot see the sun . The task is to find the total number of such buildings that receive sunlight.
Input:
First Line of input contains an integer T denoting the number of test cases. Then T test cases follow. Each test case consists of two lines. First line of each test case contains an integer N denoting the number of buildings. Second line contains N space separated integers H1, H2,…HN denoting heights of buildings.

Output:
Corresponding to each test case, print the desired output in a new line

Constraints:
1<=T<=100
1<=N<=100
1<=Hi<=100

Example:
Input:
3
6
6 2 8 4 11 13
5
2 5 1 8 3
7
3 4 1 0 6 2 3

Output:
4
3
3

Explanation:
In the first example only buildings of height 6 8 11 and 13 can see the sun, hence output is 4.

Python 2.7

def buildings_cant_see_sun(l):
    """
        return number of buildings
        cant see the sunlight
    """
    length = len(l)
    if length == 1:
        return 0
    cur_height, cant_see = l[0], 0
    for _ in range(1, length):
        if l[_] < cur_height:
            cant_see += 1
        else:
            cur_height = l[_]
    return cant_see

if __name__ == '__main__':
    t = input()
    for _ in range(t):
        n = input()
        l = map(int, raw_input().split())
        can_see = len(l) - buildings_cant_see_sun(l)
        print can_see
Advertisements