데이터사이언스 기록기📚

[프로그래머스/Python] Level 2_n^2 배열 자르기(월간 코드 챌린지 시즌3) 본문

Coding Test/프로그래머스(Python)

[프로그래머스/Python] Level 2_n^2 배열 자르기(월간 코드 챌린지 시즌3)

syunze 2022. 10. 17. 18:36

📌문제 유형

월간 코드 챌린지 시즌3

 

📌문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌나의 문제풀이

1차 시도(30.0, 나머지 시간초과)

  - 모두 순회하여 i+1, j+1 값 중 max 값 넣기

from itertools import chain

def solution(n, left, right):
    arr = [[0] * n for _ in range(n)]       # arr 초기화
    
    # arr 값 넣기
    for i in range(n):      # 가로
        for j in range(n):      # 세로
            arr[i][j] = max(i+1, j+1)
            
    # 2차원 -> 1차원 변형
    arr = list(chain(*arr))
    
    # left ~ rigth만 남기고 나머지 삭제
    return arr[left : right+1]
2차 시도(동일, deque 사용)
from collections import deque

def solution(n, left, right):
    arr = deque()
    i,j = 1,1
    return list(arr)
    # arr 값 넣기
    for idx in range(n**2):
        if (idx + 1) % n == 0:
            arr.append(max(i,j))
            j += 1
            i = 1
        else:
            arr.append(max(i,j))
            i += 1
    
    arr = list(arr)
    # left ~ rigth만 남기고 나머지 삭제
    return arr[left : right+1]
3차 시도(통과)

 - 잘라서 나타나는 배열만 값 만들기 (이렇게 해야 시간초과 안 생김!)

 - 자리 수의 값과 리스트 위치의 관계

  • arr[i][j] 중 i : 1차원 배열 인덱스 // n
  • arr[i][j] 중 j : 1차원 배열 인덱스 % n
  • arr[i][j]의 값 : i,j 중 큰 값 +1
def solution(n, left, right):
    arr = []
    
    # arr 값 넣기
    for idx in range(left, right+1):
        share = idx // n
        remain = idx % n
        arr.append(max(share+1, remain+1))
        
    return arr

 

📌다른 사람의 문제풀이

1) 간단 ver

def solution(n, left, right):
    answer = []
    
    for i in range(left,right+1):
        answer.append(max(i//n,i%n)+1)
        
    return answer

 

📌리뷰

- 1차원 인덱스 → 2차원 인덱스

  • i = 1차원 인덱스 // n
  • j = 1차원 인덱스 % n
728x90
Comments