[프로그래머스 / Swift] Lv.2 - 가장 큰 수

박준혁 - Niro·2024년 3월 29일
1

프로그래머스

목록 보기
6/12
post-thumbnail

🔗 문제 링크


https://school.programmers.co.kr/learn/courses/30/lessons/42746

✅ 풀이


굉장히 간단한 문제라고 생각했는데 실제로는..
정말 오래 걸렸었고 지금 와서는 왜 이런 생각을 처음부터 하지 못했을까..? 라는 생각이 들었습니다...

각 숫자를 비교하여 정렬을 하려고 했을 때를 보게 되면

10 과 2 중 10 이 크지만 실제로는 2가 10보다 앞자리 수로 와야 더 큰 수가 됩니다!

그러면.. 첫째자리를 비교해서 더 큰수를 앞으로 보내고 첫째 자리가 같다면 둘쨰자리를 비교해야겠다 라는 생각이였지만

굉장히 복잡하게.. 반복문.. 넣고 인덱스로 비교하고... 둘째자리는 없는 경우도 있기 때문에 굉장히 복잡했습니다..

하지만!

아래처럼 풀면 금방 끝나버리더군요!

⌨️ 풀이 방법

func solution(_ numbers:[Int]) -> String {
    
    var number = numbers.map{String($0)}
    var result = number.sorted { $0+$1 > $1+$0 }.joined()
    
    if result.first == "0" {
        return "0"
    }
    
    return result
}
  1. numbers 에 있는 값들을 String 으로 바꿔줍니다
  2. number 배열에서 $0과 $1을 합친 문자열과 $1과 $0을 합친 문자열을 비교해서 더 큰 수를 반환합니다 (내림차순)
  3. 맨 첫째자리 수가 0 이라면 (0000.. 일수 있음) 모든수 는 0 이기 때문에 0 을 반환합니다!

입출력 2번째 예시
1. 330 : 303 -> 330 반환
2. 33034 : 34330 -> 34330 반환
3. 343305 : 534330 -> 534330 반환
4. 5343309 : 9534330 -> 9534330 반환

엄청 간단하죠?

문자열로 바꾸고 각 원소들을 합친 문자열로 비교해서 내림차순으로 정렬을 하게 되면 가장 큰 수가 된다는 것이죠!

근데.. 만약 코테에 나온다면.. 시간안에 생각할 수 있을지가 의문이네요..........

profile
📱iOS Developer, 🍎 Apple Developer Academy @ POSTECH 1st, 💻 DO SOPT 33th iOS Part

0개의 댓글