Coding Test/programmers

[Python] 파이썬 프로그래머스 n^2 배열 자르기

파송송 2023. 2. 27. 13:00
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/87390

 

프로그래머스

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

programmers.co.kr


나의 풀이

  • 2차원을 1차원으로 변경하고 주어진 left와 right에 맞게 배열을 자르는 문제
n 4
left 7
right 14
  • 7과 14가 해당하는 배열을 생성하여 1차원으로 만든다

[2, 2, 3, 4, 3, 3, 3, 4, 4, 4, 4, 4]

  • 줄어든 범위만큼 left와 right도 줄여서 슬라이스 하여 답을 도출함

[4, 3, 3, 3, 4, 4, 4, 4]

 

def solution(n, left, right):
    s = left // n
    e = right // n

    a_list= list()
    base_list = [i+1 for i in range(n)]

    for i in range(s, e+1):
        a = base_list.copy()
        a[0:i+1] = [i+1 for _ in range(i+1)]
        a_list += a

    answer = a_list[left-(n*s) : right-(n*s)+1]
    return answer

슬라이스를 활용하는 문제로 접근을 하였으나 시간이 오래 걸림


다른 사람의 풀이

n 4
left 7
right 14
  • for i in range(left, right+1)의 i에 max(i//n,i%n)+1 처리를 해주어 둘 중 큰 값을 리스트에 넣어 return함
  • %연산은 값이 차례대로 나오게 하고 // 연산은 연속으로 값이 나오게 함
def solution(n, left, right):
    answer = []
    for i in range(left,right+1):
        answer.append(max(i//n,i%n)+1)
    return answer

728x90