-
[프로그래머스] n^2 배열 자르기 (월간 코드 챌린지 시즌3) Swift알고리즘 2021. 10. 26. 14:20
문제 내용
https://programmers.co.kr/learn/courses/30/lessons/87390
코딩테스트 연습 - n^2 배열 자르기
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부
programmers.co.kr
전체 코드
import Foundation func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] { // 1. Int64 인 값과 계산을 많이해서 변경하였음 let n = Int64(n) // 2. 결과 값 저장용 var result: [Int] = Array(repeating: 0, count: Int(right - left) + 1) for i in left...right { // 3. result 에 (i / n) + 1 와 (i % n) + 1 값을 비교하여 그 중 큰 값을 넣음 // (i / n) + 1 은 그 층에서 가장 작은 값이고 // (i % n) + 1 은 그 층에서의 위치 값이다. result[Int(i - left)] = (max(Int((i / n) + 1), Int(i % n + 1))) } return result }
첫번째 예시를 보면
n left right result 3 2 5 [3, 2, 2, 3] 이렇게 주어진다.
1 2 3 2 2 3 3 3 3 이런 배열에서 index 가 left ~ right 에 있는 값을 가져오는 것이다.
먼저 (i / n) + 1 이란
1 (1) 2 (1) 3 (1) 2 (2) 2 (2) 3 (2) 3 (3) 3 (3) 3 (3) 이렇게 괄호에 들어간 값이 된다.
즉, 해당 층 (가로) 의 최솟값이 된다.
첫번째 층은 최솟값이 1, 두번째는 2, 세번째는 3 이다.
(i % n) + 1 이란
1 (1) 2 (2) 3 (3) 2 (1) 2 (2) 3 (3) 3 (1) 3 (2) 3 (3) 이렇게 괄호에 들어간 값이 된다.
즉, 현재 위치 값이 된다.
이것을 길게 1차원 배열로 나타내면
1 (1, 1) 2 (1, 2) 3 (1, 3) 2 (2, 1) 2 (2, 2) 3 (2, 3) 3 (3, 1) 3 (3, 2) 3 (3, 3) 이런 식으로 된다.
left ~ right = 2 ~ 5 이므로
결과는 이렇게 된다.
3 (1, 3) 2 (2, 1) 2 (2, 2) 3 (2, 3) 3 (3, 1)
결론
입출력 예시가 애니메이션으로 되어있어서 이해하기 쉬웠다.
출처 : 프로그래머스 월간 코드 챌린지 시즌3 n^2 배열 자르기
https://programmers.co.kr/learn/courses/30/lessons/87390코딩테스트 연습 - n^2 배열 자르기
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부
programmers.co.kr
'알고리즘' 카테고리의 다른 글
[프로그래머스] 주차 요금 계산 (2022 KAKAO BLIND RECRUITMENT) Swift (0) 2022.09.06 [백준] 1,2,3 더하기 3 (15988번) (0) 2021.10.27 [프로그래머스] 피로도 (위클리 챌린지 12주차) Swift (0) 2021.10.25 [프로그래머스] 교점에 별 만들기 (위클리 챌린지 10주차) Swift (0) 2021.10.14 [백준] 톱니바퀴 (14891번) Swift (0) 2021.10.12