diff --git "a/leetcode3/\354\240\225\354\247\204\354\230\201/1944. Number of Visible People in a Queue" "b/leetcode3/\354\240\225\354\247\204\354\230\201/1944. Number of Visible People in a Queue" new file mode 100644 index 00000000..0e459e8a --- /dev/null +++ "b/leetcode3/\354\240\225\354\247\204\354\230\201/1944. Number of Visible People in a Queue" @@ -0,0 +1,59 @@ +/** + * @param {number[]} heights + * @return {number[]} + */ +var canSeePersonsCount = function(heights) { + // 볼 수 있는 조건 + // - 바로 오른쪽 + // - i j 사이 더 작은 사람 + // 시간 복잡도 O(n^2) => TLE + + let see = []; + + for (let i = 0; i < heights.length; i++){ + let count = 0; + let maxHeight = 0; + + for (let j = i+1; j maxHeight){ + count++; + } + + maxHeight = Math.max(maxHeight, heights[j]); + } + + see.push(count); + } + + return see; +}; + + +풀이.. +/** + * @param {number[]} heights + * @return {number[]} + */ +var canSeePersonsCount = function(heights) { + let see = new Array(heights.length).fill(0); + let stack = []; + + for (let i = 0; i < heights.length; i++) { + + while ( + stack.length > 0 && + heights[stack[stack.length - 1]] < heights[i] + ) { + let person = stack.pop(); + see[person]++; + } + + if (stack.length > 0) { + see[stack[stack.length - 1]]++; + } + + stack.push(i); + } + + return see; +};