문제 설명
두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여
만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다
(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다).
X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다.
X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.
예를 들어, X = 3403이고 Y = 13203이라면,
X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 3, 0, 3으로
만들 수 있는 가장 큰 정수인 330입니다.
다른 예시로 X = 5525이고 Y = 1255이면
X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로
만들 수 있는 가장 큰 정수인 552입니다
(X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)
두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.
제한 사항
3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
X, Y는 0으로 시작하지 않습니다.
X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.
입출력 예
X | Y | result |
"100" | "2345" | "-1" |
"100" | "203045" | "0" |
"100" | "123450" | "10" |
"12321" | "42531" | "321" |
"5525" | "1255" | "552" |
입출력 예 설명
입출력 예 #1
X, Y의 짝꿍은 존재하지 않습니다.
따라서 "-1"을 return합니다.
입출력 예 #2
X, Y의 공통된 숫자는 0으로만 구성되어 있기 때문에,
두 수의 짝꿍은 정수 0입니다.
따라서 "0"을 return합니다.
입출력 예 #3
X, Y의 짝꿍은 10이므로, "10"을 return합니다.
입출력 예 #4
X, Y의 짝꿍은 321입니다. 따라서 "321"을 return합니다.
입출력 예 #5
지문에 설명된 예시와 같습니다.
나의 풀이
func solution(_ X:String, _ Y:String) -> String {
var answer = ""
let xArray = getArray(X.map { Int(String($0))! })
let yArray = getArray(Y.map { Int(String($0))! })
for i in stride(from: 9, to: -1, by: -1) {
let minNum = min(xArray[i] ?? 0, yArray[i] ?? 0)
if i == 0 && minNum > 0 && answer == "" {
answer = "0"
} else if minNum > 0 {
for j in 1...minNum {
answer += "\(i)"
}
}
}
return (answer == "") ? "-1" : answer
}
func getArray(_ list: [Int]) -> [Int: Int] {
var array = [Int: Int]()
for i in list {
array[i] = (array[i] ?? 0) + 1
}
return array
}
다른 사람의 풀이
제 풀이에서는 for문을 통해 똑같은 문자열을
계속해서 반복적으로 추가하는 부분을
좀 더 깔끔하게 풀어내는 풀이를 보았습니다.
// 나의 풀이
for j in 1...minNum {
answer += "\(i)"
}
// 다른 사람의 풀이
answer += String(repeating: "\(i)", count: minNum)
String을 생성할 때
repeating을 통해 들어온 문자열을
count만큼 반복된 문자열로 만들어줍니다.
또한 repeating에 String 타입 대신
Character 타입이 들어와도 괜찮습니다 !
'Data structure & Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 | Lv.1] 둘만의 암호 (3) | 2024.04.16 |
---|---|
[프로그래머스 | Lv.1] 문자열 나누기 (3) | 2024.04.15 |
[프로그래머스 | Lv.1] 체육복 (3) | 2024.04.11 |
[프로그래머스 | Lv.1] 로또의 최고 순위와 최저 순위 (1) | 2024.04.09 |
[프로그래머스 | Lv.1] 옹알이 (2) (0) | 2024.04.01 |