본문 바로가기

코딩테스트

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

난이도 : Lv 2

분류 :  -

 

import Foundation

func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] {
    let result: [Int] = (Int(left)...Int(right)).map {
        max($0 / n + 1, $0 % n + 1)
    }
    
    return result
}

 

풀이

1. 어차피 2차원 배열의 행을 잘라서 이어붙인 1차원 배열을 만들기 때문에 애초부터 1차원 배열을 만들어줍니다.

2. n * n 만큼의 배열을 만들어주면 10^7 승 크기의 배열이 출몰할 수 있기 때문에 left...right 사이즈의 배열을 만들어줍니다.

3. 2차원 배열을 만들기로 했지만 1차원 배열을 만들었습니다. 하지만 배열의 내용은 2차원 배열의 내용과 같아야 합니다.

3-1. 2차원 배열이었다면 열의 값은 $0 % n + 1, 행의 값은 $0 / n + 1 이 됩니다. 행과 열 중 큰 값을 배열에 저장합니다.

 

** 실제로 예시를 보면 아래와 같은 모습입니다. 

  1   2   3                  [0][0] == 1, [0][1] == 2, [0][2] == 3 

2   2   3                  [1][0] == 2, [1][1] == 2, [1][2] == 3 

 3   3   3                  [2][0] == 3, [2][1] == 3, [2][2] == 3

 

 

P.S

1. 우측 좌측 나눠져있는 문제는 시간초과에 주의해서 풀어야 합니다.

2. 문제를 잘 읽고 불필요한 과정을 없애도록 노력해야 합니다.

3. JEONG9216 이 분 코드를 사용했습니다.