코딩테스트

[Swift 알고리즘] 프로그래머스(Lv.2) - n^2 배열 자르기

유정주 2022. 5. 3. 11:49
반응형

안녕하세요. 개발 중인 정주입니다.

 

오늘은 "프로그래머스(Lv.2) - n^2 배열 자르기" 문제를 풀었습니다.

 


Github

 

GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘

스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.

github.com

 

문제 링크

 

코딩테스트 연습 - n^2 배열 자르기

정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부

programmers.co.kr

 


풀이

이번 문제는 적절한 규칙을 찾으면 해결할 수 있습니다.

참고로 left와 right는 Int64로 주어지지만 Int로 변환하여 사용해도 통과할 수 있습니다.

그러면 안 될 거 같은데 통과는 가능하더라고요.

 

1. 규칙 찾기

이 문제의 원소는 i와 j의 최대값 + 1과 같습니다.

(0, 0)에는 1, (1, 0), (0, 1), (1, 1)에는 2로 반복됩니다.

즉 각 원소는 i, j 중 최대값 + 1이라는 것을 알았습니다.

 

이제 i, j를 구해야 합니다.

n * n 배열을 생성할 시 10^14로 코어 덤프 에러가 발생합니다.

따라서 right - left 크기만큼만 반복을 해주면서 배열을 만들면 됩니다.

 

이때 i는 $0 / n이 되고 j는 $0 % n이 됩니다.

 

후기

정말 열 받는 문제였습니다.

left와 right가 Int64로 주어진 비밀에 대해 파해치다 정말 모르겠어서 찾아봤는데..

그냥 Int로 캐스팅해서 쓰더라고요. 이게 가능하면 왜 Int64로 준건지... ㅠㅠ

다 풀어놓고 뭐지 뭐지 하면서 20분 가량 날렸네요... 


전체 코드

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)
    }
    // print("result: \(result)")
    
    return result
}

아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

반응형