ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 탑
    코딩 테스트/Level 2 2019. 11. 10. 23:07
    반응형

    https://programmers.co.kr/learn/courses/30/lessons/42588

     

    파이썬

    제시된 조건 그대로 풀었습니다.
    range 함수의 사용법을 안다면 쉽게 풀 수 있습니다. 

    def solution(heights):
        answer = [0] * len(heights)
        for i in range(len(heights) - 1, 0, -1):  # for i in range(len(heights) - 1, -1, -1):
            for j in range(i - 1, -1, -1):
                if heights[i] < heights[j]:
                    answer[i] = j + 1
                    break
        return answer

    자바스크립트

    일단 쉽게 처리해 보았습니다. 초기화 부분이 좀 거슬리죠?

    function solution(heights) {
        var answer = []
        for (let index = 0; index < heights.length; index++) {
            answer.push(0)
        }
        for (let i = heights.length - 1; i > 0; i--) {
            for (let j = i - 1; j >= 0; j--) {
                if (heights[i] < heights[j]) {
                    answer[i] = j + 1
                    break
                }
            }
        }
        return answer
    }

    좋은 트릭은 아닙니다만.. 코드 뽐내기니까...

    j를 var로 선언해서 {} 밖에서도 사용할 수 있도록 바꿔서 코드를 줄였습니다만...

    다른 언어를 사용하시는 분들은 이게 멍미 하시겠죠? 가독성이 망. 

    function solution(heights) {
        var answer = new Array(heights.length)
        for (let i = heights.length - 1; i >= 0; i--) {
            for (var j = i - 1; j >= 0; j--) {
                if (heights[i] < heights[j]) break
            }
            answer[i] = j + 1
        }
        return answer
    }

    이 정도라면.. 어떤가요? 

    function solution(heights) {
        var answer = [0];
        for (let i = heights.length - 1; i > 0; i--) {
            let j = i - 1;
            while (j >= 0 && heights[i] >= heights[j]) {
                j--;
            }
            answer[i] = (j < 0) ? 0 : j + 1;
        }
        return answer;
    }

    함수형으로..

    function solution(heights) {
        return heights.map((v, i) => {
            while (i) {
                i--
                if (heights[i] > v) return i + 1
            }
            return 0
        })
    }

    자바

    class Solution {
        public int[] solution(int[] heights) {
            int[] answer = new int[heights.length];
            for (int i = heights.length - 1; i > 0; i--) {
                for (int j = i - 1; j >= 0; j--) {
                    if (heights[i] < heights[j]) {
                        answer[i] = j + 1;
                        break;
                    }
                }
            }
            return answer;
        }
    }

    func solution(heights []int) []int {
    	answer := make([]int, len(heights))
    	for i := len(heights) - 1; i > 0; i-- {
    		for j := i; j >= 0; j-- {
    			if heights[i] < heights[j] {
    				answer[i] = j + 1
    				break
    			}
    		}
    	}
    	return answer
    }

    코틀린

    class Solution {
        fun solution(heights: IntArray): IntArray {
            val answer = IntArray(heights.size)
            for (i in heights.size - 1 downTo 1) {
                for (j in i - 1 downTo 0) {
                    if (heights[i] < heights[j]) {
                        answer[i] = j + 1
                        break
                    }
                }
            }
            return answer
        }
    }

    C#

    public class Solution
    {
        public int[] solution(int[] heights)
        {
            int[] answer = new int[heights.Length];
            for (int i = heights.Length - 1; i > 0; i--)
            {
                for (int j = i - 1; j >= 0; j--)
                {
                    if (heights[i] < heights[j])
                    {
                        answer[i] = j + 1;
                        break;
                    }
                }
            }
            return answer;
        }
    }
    반응형
Designed by Tistory.