-
n^2 배열 자르기코딩 테스트/Level 2 2021. 10. 17. 09:06반응형
https://programmers.co.kr/learn/courses/30/lessons/87390
가벼운 맘으로...
def solution(n, left, right): answer = [[j + 1 if j >= i else i + 1 for j in range(n)] for i in range(n)] return [each for line in answer for each in line][left:right + 1]
시간제한이 있는 문제였다...
테스트 1 〉 통과 (7.42ms, 17.1MB) 테스트 2 〉 실패 (시간 초과) 테스트 3 〉 실패 (시간 초과) 테스트 4 〉 통과 (0.66ms, 10.5MB) 테스트 5 〉 통과 (0.56ms, 10.3MB) 테스트 6 〉 통과 (92.52ms, 53.9MB) 테스트 7 〉 통과 (105.19ms, 56.5MB) 테스트 8 〉 통과 (113.81ms, 55.9MB) 테스트 9 〉 실패 (시간 초과) 테스트 10 〉 실패 (시간 초과) 테스트 11 〉 실패 (시간 초과) 테스트 12 〉 실패 (시간 초과) 테스트 13 〉 실패 (시간 초과) 테스트 14 〉 실패 (시간 초과) 테스트 15 〉 실패 (시간 초과) 테스트 16 〉 실패 (시간 초과) 테스트 17 〉 실패 (시간 초과) 테스트 18 〉 실패 (시간 초과) 테스트 19 〉 실패 (시간 초과) 테스트 20 〉 실패 (시간 초과)
for를 줄여볼까?
def solution(n, left, right): answer = [j + 1 if j >= i else i + 1 for j in range(n) for i in range(n)] return answer[left:right + 1]
약간 빨라졌지만... 실패...
안~ 가벼운 문제였구나..테스트 1 〉 통과 (5.78ms, 16.9MB) 테스트 2 〉 실패 (시간 초과) 테스트 3 〉 실패 (시간 초과) 테스트 4 〉 통과 (0.43ms, 10.2MB) 테스트 5 〉 통과 (0.36ms, 10.3MB) 테스트 6 〉 통과 (70.18ms, 47.1MB) 테스트 7 〉 통과 (74.13ms, 49MB) 테스트 8 〉 통과 (80.97ms, 48.4MB) 테스트 9 〉 실패 (시간 초과) 테스트 10 〉 실패 (시간 초과) 테스트 11 〉 실패 (시간 초과) 테스트 12 〉 실패 (시간 초과) 테스트 13 〉 실패 (시간 초과) 테스트 14 〉 실패 (시간 초과) 테스트 15 〉 실패 (시간 초과) 테스트 16 〉 실패 (시간 초과) 테스트 17 〉 실패 (시간 초과) 테스트 18 〉 실패 (시간 초과) 테스트 19 〉 실패 (시간 초과) 테스트 20 〉 실패 (시간 초과)
슬라이스도 쓰지 말까?
def solution(n, left, right): answer = [] for j in range(n): for i in range(n): if left <= (i + j * n) <= right: answer.append(j + 1 if j >= i else i + 1) return answer
통과가 늘었지만 실패..
얄팍한 수로는 해결이 안된다..테스트 1 〉 통과 (13.94ms, 17.4MB) 테스트 2 〉 실패 (시간 초과) 테스트 3 〉 실패 (시간 초과) 테스트 4 〉 통과 (0.70ms, 10.2MB) 테스트 5 〉 통과 (0.67ms, 10.2MB) 테스트 6 〉 통과 (73.88ms, 21.3MB) 테스트 7 〉 통과 (90.05ms, 22MB) 테스트 8 〉 통과 (86.97ms, 19.8MB) 테스트 9 〉 통과 (7930.64ms, 21.7MB) 테스트 10 〉 통과 (8433.51ms, 21.6MB) 테스트 11 〉 통과 (5634.30ms, 21.5MB) 테스트 12 〉 실패 (시간 초과) 테스트 13 〉 실패 (시간 초과) 테스트 14 〉 실패 (시간 초과) 테스트 15 〉 실패 (시간 초과) 테스트 16 〉 실패 (시간 초과) 테스트 17 〉 실패 (시간 초과) 테스트 18 〉 실패 (시간 초과) 테스트 19 〉 실패 (시간 초과) 테스트 20 〉 실패 (시간 초과)
.....
def solution(n, left, right): answer = [] for num in range(left, right + 1): answer.append(max(num % n + 1, num // n + 1)) return answer
def solution(n, left, right): answer = [max(num % n + 1, num // n + 1) for num in range(left, right + 1)] return answer
solution = lambda n, left, right: [max(num // n, num % n) + 1 for num in range(left, right + 1)]
테스트 1 〉 통과 (19.75ms, 17.4MB) 테스트 2 〉 통과 (22.88ms, 22.2MB) 테스트 3 〉 통과 (32.78ms, 22.5MB) 테스트 4 〉 통과 (0.04ms, 10.3MB) 테스트 5 〉 통과 (0.02ms, 10.3MB) 테스트 6 〉 통과 (21.94ms, 21.3MB) 테스트 7 〉 통과 (27.69ms, 21.9MB) 테스트 8 〉 통과 (28.29ms, 19.8MB) 테스트 9 〉 통과 (21.44ms, 21.7MB) 테스트 10 〉 통과 (23.00ms, 21.7MB) 테스트 11 〉 통과 (21.60ms, 21.6MB) 테스트 12 〉 통과 (30.13ms, 20.5MB) 테스트 13 〉 통과 (26.95ms, 21.6MB) 테스트 14 〉 통과 (26.06ms, 21.3MB) 테스트 15 〉 통과 (26.36ms, 21.1MB) 테스트 16 〉 통과 (27.72ms, 21.4MB) 테스트 17 〉 통과 (26.53ms, 21.2MB) 테스트 18 〉 통과 (28.97ms, 22.3MB) 테스트 19 〉 통과 (28.41ms, 21.5MB) 테스트 20 〉 통과 (24.36ms, 20.8MB)
자바
class Solution { public int[] solution(int n, long left, long right) { int[] answer = new int[(int) (right - left + 1)]; for (long i = left; i < right + 1; i++) { int pos = (int) (i - left); answer[pos] = Math.max((int) (i % n), (int) (i / n)) + 1; } return answer; } }
반응형