알고리즘

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

hminor 2023. 6. 21. 11:33
# 왼쪽, 오른쪽 사이에 해당하는 값으로 몫과 나머지를 구한 다음 큰 값에 +1 시켜줘서 추가해주기

def solution(n, left, right):
    result = []
    for i in range(left, right+1):
        x, y = i//n, i%n
        if x >= y: result.append(x+1)
        else: result.append(y+1)    
    return result

 

# 시간초과
# 해당 풀이는 처음 접근한 방식으로 2차원 배열처럼 생각을 한 상태로
# 2중 for문을 돌려 해결해보려 했음.
# 추후 시간 초과로 인해 첫번째 for문에서 left 값보다 cnt 값이 더 작으면
# n만큼 cnt에 추가해주는 형식으로 시간을 줄이려 했지만 엄청 빡빡한 타임으로 안됨...

def solution(n, left, right):
    cnt, li, flag = 0, [], False
    for i in range(n):
        if left > cnt + n: 
            cnt += n
            continue
        for j in range(n):
            if left <= cnt <= right:
                x = 0 # 해당 칸의 값
                if i >= j: x = i
                else: x = j
                li = li + [x+1]
            elif cnt > right: 
                flag = True
                break
            cnt += 1
        if flag == True: break
    return li

 

# 시간초과
# 최종 풀이 전 
# n**2 에 해당하는 배열을 만든 다음 그 안의 값으로 처리를 하려고 했지만 
# 물론 지금 생각해보면 바보 같은 생각이긴 하다.
# 이유는 어차피 for문으로 나오는 i 값으로 하면 되는건데 굳이?? ㅋ

def solution(n, left, right):
    li, result = [i for i in range(n**2)], []
    for i in range(left, right+1):
        x, y = li[i]//n, li[i]%n
        if x >= y: result.append(x+1)
        else: result.append(y+1)
    
    return li