출처: 프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12932
난이도: Lv.1
문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
제한 조건
- 0은 10,000,000,000이하인 자연수입니다
입출력 예
n | return |
12345 | [5,4,3,2,1] |
1. 첫 번째 시도 (실패)
문제를 처음 봤을 때, 어? 버블 정렬로 1,2,3,4,5를 나타낸 다음 대충 배열 순서를 뒤바꾸는 구문을 쓰면 되지 않을까?? 싶어서 시도해봤다.
func solution( n: Int64) -> [Int] {
// Int64 자연수를 String으로 변환하여 각 자리 숫자를 분리
let digits = String(n).compactMap { Int(String($0)) }
// 버블 정렬 함수
func bubbleSort( array: inout [Int]) {
let count = array.count
for i in 0..<count {
for j in 0..<count-i-1 {
if array[j] > array[j+1] {
let temp = array[j]
array[j] = array[j+1]
array[j+1] = temp
}
}
}
}
// 분리된 숫자 배열을 복사하여 정렬
var sortedDigits = digits
bubbleSort(&sortedDigits) // 버블 정렬 적용
for char in sortedDigits.reversed(){
print(char)
}
return sortedDigits
}
하지만.. 실패 ㅠㅠ
좋아좋아 시도는 좋았어~
2. 두 번째 시도 (실패)
func solution( n: Int64) -> [Int] {
// Int64 자연수를 String으로 변환하여 각 자리 숫자를 분리
let digits = String(n).compactMap { Int(String($0)) }
// 버블 정렬 함수를 내림차순으로 수정
func bubbleSortDescending( array: inout [Int]) {
let count = array.count
for i in 0..<count {
for j in 0..<count-i-1 {
if array[j] < array[j+1] { // 부등호 방향을 변경하여 내림차순 정렬
let temp = array[j]
array[j] = array[j+1]
array[j+1] = temp
}
}
}
}
// 분리된 숫자 배열을 복사하여 내림차순으로 정렬
var sortedDigits = digits
bubbleSortDescending(&sortedDigits) // 내림차순 정렬 적용
return sortedDigits
}
아....... 뭔가 조금 더 하면 될 것 같은데 뭐가 문제일까 ㅠㅠㅠ
3. 세 번째 시도(실패)
let inputStr = "12345"
// 문자열을 문자 배열로 변환 후 각 문자를 Int64로 변환하여 숫자 배열 생성
let resultArray = inputStr.compactMap { Int64(String($0)) }
print(resultArray) // [1, 2, 3, 4, 5]
error: value of type 'Int64' has no member 'compactMap'
이때 부터는 아까 버블정렬은 잊고 새로운 마음으로 다시 짯던 것 같다.
구글링을 살짝 해 봤는데 compactMap을 쓰면 뭔가 될 것 같아서 끄적여봤다. 하지만 어림없죠?
4. 네 번째 시도 (성공)
func solution(_ n: Int64) -> [Int] {
var arr = Array(String(n)) // 숫자를 문자열로 변환 후 배열로 만듦
arr.reverse() // 배열을 역순으로 뒤집음
var result = [Int]() // 결과를 저장할 배열
for char in arr {
if let digit = Int(String(char)) {
result.append(digit) // 문자를 숫자로 변환하여 배열에 추가
}
}
return result
}
모든걸 내려놓고 처음으로 돌아갔다. 배열에 차근차근 넣어보고, 구글링을 통해 reverse라는 기능을 알아내고, 형 변환 까지. 결과창이 파란색으로 도배될 때 짜릿했다. 후후
'Programmers' 카테고리의 다른 글
[iOS Swift] Lv.1 정수 제곱근 판별 (0) | 2024.05.10 |
---|---|
[iOS Swift] Lv.1 문자열을 정수로 바꾸기 (0) | 2024.05.10 |
[iOS Swift] Lv.1 x만큼 간격이 있는 n개의 숫자 (0) | 2024.05.09 |
[iOS Swift] Lv.1 나머지가 1이 되는 수 찾기 (0) | 2024.05.08 |
[iOS Swift] Lv.1 약수의 합 (0) | 2024.05.08 |