일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ac 구현 풀이
- swift 연속된 부분 수열의 합
- swift 9095 풀이
- swift 2xn 타일링 풀이
- rxswift
- swift 백준 9095
- 백준 2xn 타일링
- swift 2xn 타일링
- ac 투포인터
- swift 연속된 부분 수열의 합 풀이
- 123 더하기 풀이
- swift 프로그래머스
- swift codility
- swift 2xn 타일링 백준
- 백준 2xn 타일링 풀이
- swift algorithm
- 연속된 부분 수열의 합 투포인터
- swift
- swift ac 문제풀이
- swift dfs
- iOS Charts
- swift 알고리즘
- 1 2 3 더하기 풀이
- swift ac 풀이
- swift ac
- ios
- ac swift 풀이
- MVVM
- swift gRPC
- 연속된 부분 수열의 합 swift
- Today
- Total
boraBong
[Swift] 삼각 달팽이 문제 풀이 [Programmers - Level2] 본문
💬 문제
https://school.programmers.co.kr/learn/courses/30/lessons/68645
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💬 Idea
삼각형을 채울 때 n에서부터 ↙️ ➡️ ↖️ 의 규칙을 따르며 숫자가 채워지고, 채워지는 기준 개수가 -1씩 줄어든다는 것을 발견하여
해당 원리를 이용해 문제를 풀이했다.
반복문을 돌며 trianglePoint 변수를 1씩 증가하면서, 3으로 나눈 나머지로 규칙을 갖게끔 설계하였다.
(삼각형이므로 3씩 기점으로 패턴이 반복됨)
|
<예시 N = 5 일 때 >
[[0], [0,0], [0,0,0], [0,0,0,0], [0,0,0,0,0]] 배열이 [[1], [2,12], [3,13,11], [4,14,15,10], [5,6,7,8,9]] 와 같이 채워진다.
# 1️⃣단계 (↙️ 밑으로 하강하며 채우기)
N = 5
밑으로 하강하면서 [0][0], [1][0], [2][0], [3][0], [4][0]이 채워진다.
# 2️⃣단계 (➡️ 오른쪽으로 이동하며 채우기)
N = 4
오른쪽으로 이동하면서 [4][1], [4][2], [4][3], [4][4]가 채워진다.
N = 3
위로 상승하면서 [3][3], [2][2], [1][1]이 채워진다.
# 3️⃣단계 (↖️ 위로 상승하면서 채우기)
# 4️⃣단계 (↙️ 밑으로 하강하면서 채우기)
N = 2
밑으로 하강하면서 [2][1], [3][1]이 채워진다.
# 5️⃣단계 (➡️ 오른쪽으로 이동하며 채우기)
N = 1
오른쪽으로 이동하면서 [3][2]가 채워진다.
💬 풀이
import Foundation
func solution(_ n:Int) -> [Int] {
var n = n
var trianglePoint = 1
var triangleFilledCnt = 0 // 삼각형에 채워지는 숫자 개수
var number = 0 // 계속 오르는 숫자
var y = -1 // y 좌표
var ansArr: [[Int]] = []
for i in 1...n {
ansArr.append(Array(repeating: 0, count: i))
}
while n > 0 {
number += 1
triangleFilledCnt += 1
switch trianglePoint % 3 {
case 0: // 상승하면서 채워짐
y -= 1
ansArr[y][ansArr[y].lastIndex(of: 0) ?? 0] = number
case 1: // 하강하면서 채워짐
y += 1
ansArr[y][ansArr[y].firstIndex(of: 0) ?? 0] = number
default: // 가장 밑단만 채워짐
ansArr[y][ansArr[y].firstIndex(of: 0) ?? 0] = number
}
// 기점 예시: 5 / 4 / 3 / 2 / 1
if triangleFilledCnt == n {
n -= 1 // 기준 숫자 - 1
trianglePoint += 1 // 삼각형 point + 1
triangleFilledCnt = 0
}
}
return ansArr.flatMap({ $0 })
}
GitHub - hwangJi-dev/swiftAlgorithm: Algorithm Practice with Swift
Algorithm Practice with Swift. Contribute to hwangJi-dev/swiftAlgorithm development by creating an account on GitHub.
github.com
'iOS > Algorithm' 카테고리의 다른 글
[Swift] 11726번: 2xn 타일링 문제 풀이 [BOJ - Silver3] (0) | 2023.04.06 |
---|---|
[Swift] 9095번: 1, 2, 3 더하기 문제 풀이 [BOJ - Silver3] (2) | 2023.04.06 |
[Swift] 조이스틱 문제 풀이 [Programmers - Level2] (4) | 2023.04.04 |
[Swift] 불량 사용자 문제 풀이 [Programmers - Level3 (2019 카카오 개발자 겨울 인턴십)] (0) | 2023.04.03 |
[Swift] 7576번: 토마토 문제 풀이 [BOJ - Gold5] (0) | 2023.04.02 |