honey_pot

[python] n^2 배열 자르기 본문

문제 풀이

[python] n^2 배열 자르기

_tera_ 2022. 8. 8. 23:07

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