일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- SWIFT
- ViewModifier
- UIStackView
- NotificationCenter
- alamofire
- SwiftUI_Preview_Provider
- pod install
- 코딩테스트
- ios
- AsyncImage
- image
- android
- EventKit
- Appearance변경
- Kotlin
- MapKit
- CoreLocation
- segue
- cocoapods
- UserDefaults
- Java
- 백준
- Alert
- autolayout
- format형식
- ios15
- snapkit
- swiftUI
- programmers
- kakaomap
Archives
- Today
- Total
감자주먹밥
[프로그래머스] 가장 큰 수 (swift) 본문
728x90
문제
해결 과정
전혀 어떻게 풀어야 할 지 감이 안 잡혔다.
그냥 모든 경우의 수를 만들고 비교하자니 오래 걸릴 것 같았고, 그 외의 방법은 아무리 생각해도 떠오르지 않았다.
결국은 풀이과정을 검색해서 알아보았다.
- 받은 수들을 3번 반복하여 저장하고 문자열로 비교 정렬한다.
이 방법을 사용해서 금방 만들어 보았다.
var DictInt: [Int:String] = Dictionary(uniqueKeysWithValues: case3.map({
var temp: String = String($0)
temp.append(temp+temp)
return ($0, temp)
}))
var arr: [Int] = DictInt.sorted(by: {$0.value > $1.value}).map({$0.key})
print(arr.reduce("",{String($0)+String($1)}))
테스트 까지는 완벽했는데 제출만 하면 시간이 오래걸려 실패했다...
결국 답을 찾아보았더니 너무 허무했다.
let sortNum: [Int] = case1.sorted(by: { Int("\\($0)\\($1)")! > Int("\\($1)\\($0)")! })
print(sortNum)
if(sortNum[0] == 0){
print("0")
}
else{
print(sortNum.reduce("", {String($0) + String($1)}))
}
사실은 문제에 모두 힌트가 있었습니다!! 바로 문자열과 순서를 재배치하여 라는 말이었죠. 첫 번째 시행착오에서 저는 값을 비교할 수는 있었지만, 제한 사항에 나타난 것처럼 숫자를 키워서 계속 비교를 시도했기 때문에 출력 초과 오류가 발생했었습니다. 그래서 두 번째 방법은, 비교해서 정렬을 하되, "문자열로 합쳐 비교하여 재배치"를 진행하는 방법입니다.
- 주어진 numbers 배열을 정렬한다. 정렬 방식은 다음과 같다.
- 첫 번째 정수값($0)과 두 번째 정수값($1)을 String으로 변환시킨다음 두 String을 붙여 하나의 문자열을 만들어 낸다.
- 첫 번째 정수값을 먼저 배치한 경우와 두 번째 정수값을 먼저 배치한 경우 중 Int로 변환했을 때 어느 값이 더 큰지 비교하여 정렬한다. 예를 들어 0과 9 값이 있다면 "09" 와 "90"을 만들어 Int 로 변환한 뒤 값을 비교한다. 9와 90 중 90이 더 크기 때문에 0이 9의 뒤로 정렬되게 된다.
- 정렬된 배열의 첫 번째 값이 0인지 확인하여 0 일 경우 "0"을 출력한다.
- 정렬한 첫 번째 값이 0이라는 것은 모든 배열의 값이 0 일 경우를 의미하게 된다. [0,0,0,0] 이 주어졌을 때 그대로 값을 붙여서 return 하면 "0"이 아니라 "0000" 이 출력되기 때문에 올바르지 않게 된다.
- 정렬된 배열의 값을 하나씩 꺼내서 하나의 문자열로 합친(reduce) 결과값을 반환한다.
출처 - https://caution-dev.tistory.com/4
정렬을 할 때 숫자들을 연결시켜 비교하는 방법이였다.
길이도 짧고, 생각치도 못 했던 방법이다.
문제를 많이 풀고 계속 습득해서 이런 문제정도는 쉽게 풀 수 있게 해야겠다...
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 체육복 (swift) (0) | 2021.12.18 |
---|---|
[프로그래머스] 프린터 (swift) (0) | 2021.12.18 |
[프로그래머스] 기능개발 (swift) (0) | 2021.12.18 |
[프로그래머스] H-Index (swift) (0) | 2021.12.18 |
[프로그래머스] K번째 수 (swift) (0) | 2021.12.18 |
Comments