-
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; } }
반응형