큰 수 만들기

Sett·2021년 8월 2일
1

문제

https://programmers.co.kr/learn/courses/30/lessons/42883?language=swift

문제 접근

  1. 처음에 문제가 이해가 안감, 더 큰 수가 있는데?
  2. 정렬하지 말란 소리였음. 예를 들어서 1234, 2면 34인데 43이 왜 안되지 한참 고민함.
  3. 어떻게 큰 수를 뽑을까. 현재 들어온 거보다 나중에 들어온 값이 크면 현재꺼 날리고 나중꺼 갱신하고 이렇게 푸는 거 같은데 구체적인 예시를 못 들겠는 거임.
  4. 여러 자료 참고했는데 이거 다 싶은 게 없었음. C++이나 파이썬에 내공이 부족해서 그런 듯
  5. 그러다가 기가막힌 논리를 찾았는 데 그리디에 가장 적합한 거 같았음.

다시 접근

  1. result.isEmpty면 일단 넣어
  2. result.last가 내가 넣으려는 수보다 작아? 그럼 날려. 그리고 한번 버린거 표시해(k를 줄여)
  3. 1, 2를 반복하다가 내가 넣으려는 수가 더 작아? 그럼 넣어 또 1, 2를 반복해.
  4. 이렇게하면 나중일은 생각안하고 그냥 내가 마지막 놈 보다 작아? 커? 이거만 따져서 가장 그리디에 적합한 것 같았다.
  5. 그리고 append할때 k를 줄이지 않기 때문에 마지막에 자릿수 날리는 작업도 필요한 듯 하다. 아래의 소스 코드
while (mycount > 0) {
        result.removeLast()
        mycount -= 1
    }

소스코드

func solution(_ number: String, _ k: Int) -> String {
    let numarr = Array(number)
    var mycount = k
    var result: [Character] = []
    for i in 0..<numarr.count {
        while (!result.isEmpty && result.last! < numarr[i] && mycount > 0) {
            result.removeLast()
            mycount -= 1
        }
        result.append(numarr[i])
    }
    
    while (mycount > 0) {
        result.removeLast()
        mycount -= 1
    }
    
    return String(result)
}
profile
안녕하세요

0개의 댓글

관련 채용 정보