코딩테스트/기출
[월간 코드 챌린지 시즌3 / 프로그래머스] 87390번 : n^2 배열 자르기
ydin
2022. 9. 18. 19:29
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/87390
나름 풀어본다고 고군분투했는데도 틀려서 답지 봤는데 풀이가 너무 짧아서 당황스럽네
- 정답 풀이
def solution(n, left, right):
answer = []
for i in range(left, right + 1):
answer.append(max(i // n, i % n) + 1)
print(answer)
return answer
- 시도해본 풀이
대부분 시간초과가 발생했다
def solution(n, left, right):
matrix = [[0] * n for _ in range(n)]
answer = []
for k in range(n):
for i in range(k + 1):
for j in range(k + 1):
if matrix[i][j] == 0:
matrix[i][j] = k + 1
answer = []
for i in range(n):
for j in range(n):
answer.append(matrix[i][j])
return answer[left : right + 1]
45%까지는 맞았는데, 나머지는 시간초과 발생
def solution(n, left, right):
temp = [i for i in range(1, n + 1)]
answer = []
for i in range(1, n + 1):
for j in range(i):
answer.append(i)
for j in range(i, n):
answer.append(temp[j])
return answer[left : right + 1]
answer를 다 구하고 거기서 left ~ right를 구하기보다
left가 속한 리스트, 그 사이의 리스트, right가 속한 리스트를 직접 구해서 진행했는데 60퍼센트까지 가서 멈췄다
def solution(n, left, right):
temp = [i for i in range(1, n + 1)]
start_num = left // n
end_num = right // n
start = []
end = []
for _ in range(start_num + 1):
start.append(start_num + 1)
for i in range(start_num + 1, n):
start.append(temp[i])
mid = []
for i in range(start_num + 1, end_num):
for _ in range(i + 1):
mid.append(i + 1)
for j in range(i + 1, n):
mid.append(temp[j])
for _ in range(end_num + 1):
end.append(end_num + 1)
for i in range(end_num + 1, n):
end.append(temp[i])
answer = start[left % n : ] + mid + end[ : right % n + 1]
return answer