honey_pot
[python] n^2 배열 자르기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/87390
이 문제...뭘까? 푼 사람들 패턴 유추의 천재들인걸까
시간 초과 1 -> 이건 예상함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def solution(n, left, right):
# 1. n행 n열 크기의 비어있는 2차원 배열
grid = [[0 for _ in range(n)] for _ in range(n)]
grid[0] = [i for i in range(1,n+1)]
2. 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채우기
for i in range(n): #
for j in range(i+1): # 0부터 i 까지
if grid[i][j] == 0:
grid[i][j] = i+1 # 1부터 n 까지 저장
for k in range(i):
if grid[k][j] == 0:
grid[k][j] = i+1
answer = list(sum(grid,[]))
return answer[left:right+1]
|
cs |
시간 초과 2 -> for문 하나 없애서 그나마 나은편 하지만 시간초과
1
2
3
4
5
6
7
8
9
10
11
|
def solution(n, left, right):
# 1. n행 n열 크기의 비어있는 2차원 배열
grid[left//n][left%n] = max(left//n, left % n) + 1
grid[right//n][right%n] = max(right//n, right % n) + 1
for i in range(left//n,right//n+1):
for j in range(n):
grid[i][j] = max(i,j) + 1
answer = list(sum(grid,[]))
return answer[left:right+1]
|
cs |
3 자스 풀이를 파이썬으로 바꿔본 풀이
이건......이걸 어떻게 알아요
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import math
def solution(n, left, right):
grid = []
for i in range(left, right+1):
j = math.floor(i/n) - i%n
if j < 0 :
j = 0
grid.append((i % n + 1 + j))
return grid
|
cs |
4 행과 열 인덱스 중 max값을 구하고 1을 더한다는 초기 아이디어를 살린 풀이
비슷한 문제 만나면 이렇게 풀 것 같다ㅎ
1
2
3
4
5
6
7
8
9
|
import math
def solution(n, left, right):
grid = []
for i in range(left, right+1):
row = i //n
col = i % n
grid.append(max(row,col) + 1)
return grid
|
cs |
'문제 풀이' 카테고리의 다른 글
[python] 방문 길이 (0) | 2022.08.12 |
---|---|
[python] 전력망을 둘로 나누기 (0) | 2022.08.11 |
[python] 예상 대진표 (0) | 2022.08.06 |
[python] 방금 그곡 (0) | 2022.08.05 |
[Python] [3차] 파일명 정렬 (0) | 2022.08.03 |
Comments