반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 "프로그래머스(Lv.2) - n^2 배열 자르기" 문제를 풀었습니다.
Github
문제 링크
풀이
이번 문제는 적절한 규칙을 찾으면 해결할 수 있습니다.
참고로 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
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형