hyeon.s
개발로그
hyeon.s
전체 방문자
오늘
어제
  • 분류 전체보기 (150)
    • Web 및 인프라 (1)
      • Web (1)
      • Terraform (2)
      • Docker (1)
    • Android (1)
      • 공부 (28)
      • 트러블슈팅 (12)
      • 프로젝트 개발 (10)
      • Compose (2)
      • 우테코 프리코스 (0)
    • Server (5)
      • 공부 (1)
      • Spring (4)
    • 알고리즘 (68)
      • 문제풀이 (C++,Kotlin) (54)
      • 공부 (13)
    • 디자인 (3)
      • UI (3)
    • Language (5)
      • Kotlin (5)
      • JAVA (0)
    • IT 동아리 (8)
      • UMC 3기 (Android) (7)
      • Sopt 32기 (Android) (1)

Github

글쓰기 / 관리자
hELLO · Designed By 정상우.
hyeon.s

개발로그

[프로그래머스/Kotlin] Lv2 가장 큰 수 : 정렬
알고리즘/문제풀이 (C++,Kotlin)

[프로그래머스/Kotlin] Lv2 가장 큰 수 : 정렬

2023. 9. 3. 02:21
728x90

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

문제 풀이 아이디어

사전식 정렬을 이용해서 문제를 풀 수 있다.

[6, 10, 2] 가 예제로 존재 할 때

6과 10으로 610과 106 조합을 만들 수 있다. 이 때 더 큰 값은 610 이므로 6,10,2 순서를 유지한다.
10과 2 로 102와 210 조합을 만들 수 있다. 이 때 더 큰 값은 210 이므로 6,2,10로 순서를 바꾼다.
6과 2로는 62와 26 조합을 만들 수 있다. 이 때 더 큰 값은 62 이므로 6,2,10 순서를 유지한다.

이렇게 유지된 배열의 값을 joinToString("") 을통해서 합쳐진 하나의 값으로 return 한다.

이 때 예외상황으로 배열의 첫번째 원소 값이 0일 경우 최대 만들어질 수 있는 값은 0 ... 00 과 같은 수 이므로
"0"을 리턴하도록 한다.

코드

import java.util.*

class Solution {
    object SortByNum : Comparator <String>{
        override fun compare(o1: String?, o2: String?): Int {
            return (o2+o1).toInt().compareTo((o1+o2).toInt())
        }
    }
    fun solution(numbers: IntArray): String {
       var numberString :MutableList<String> = mutableListOf()
        numbers.forEach{
            numberString.add(it.toString())
        }
        var answer  = numberString.sortedWith(SortByNum)
        if (answer[0] == "0") {
            return "0"
        }
        return answer.joinToString("")
    }
}

배운점

- 코틀린의 compare 함수를 만들고 적용하는 방법에 대해서 알게되었다. array.sortedWith() 하고 괄호에 Comparator를 넣어주면 된다.

- 람다식으로 Comparator를 만들 수도 있고, 위 코드처럼 object로 Comparator를 상속 받아 override 함수로 compare 함수를 작성할 수 있다. 

람다식으로 compartor 만든 예시

class SolutionKt {
    fun solution(numbers: IntArray): String {
        var answer = ""
        numbers.sortedWith(Comparator { o1, o2 -> "$o2$o1".compareTo("$o1$o2") }).forEach { answer += it }
        return if(answer.startsWith("0")) "0" else answer
    }
}

- a.compareTo(b) 함수에 대해서 알게되었다. 매개변수로 a,b를 주고 return a.compareTo(b)를 할 경우 오름차순, return b.compareTo(a) 경우 내림차순으로 정렬한다는 의미이다.

위 코드에서는 o1이 먼저 있으므로 내림차순 정렬을 하기위해서는 (o2+o1).compareTo(o1+o2)를 작성해야했다. 

728x90
저작자표시 (새창열림)

'알고리즘 > 문제풀이 (C++,Kotlin)' 카테고리의 다른 글

[프로그래머스/Kotlin] Lv2 타겟 넘버 : BFS  (0) 2023.09.07
[프로그래머스/Kotlin] Lv2 소수찾기 : 완전탐색  (0) 2023.09.05
[프로그래머스/Kotlin] Lv2 프로세스 : Queue  (0) 2023.08.31
[우테코/Kotlin] 우아한 테크코스 온보딩 풀이 및 공부  (0) 2023.08.14
[BOJ/C++] 10974번 모든 순열  (0) 2023.03.15
'알고리즘/문제풀이 (C++,Kotlin)' 카테고리의 다른 글
  • [프로그래머스/Kotlin] Lv2 타겟 넘버 : BFS
  • [프로그래머스/Kotlin] Lv2 소수찾기 : 완전탐색
  • [프로그래머스/Kotlin] Lv2 프로세스 : Queue
  • [우테코/Kotlin] 우아한 테크코스 온보딩 풀이 및 공부
hyeon.s
hyeon.s
이유있는 코드를 짜자

티스토리툴바