π μ½λ©ν μ€νΈ
βπ» Github
λ¬Έμ μ€λͺ
λ μ μ 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
- μ§λ¬Έμ μ€λͺ λ μμμ κ°μ΅λλ€.
λ¬Έμ νμ΄
λμ νμ΄
import Foundation
func solution(_ X:String, _ Y:String) -> String {
let setX = Set(X)
let setY = Set(Y)
let intersect = setX.intersection(setY)
var duplication = [String]()
for i in Array(intersect) {
let count = min(Y.filter{ $0 == i }.count, X.filter{ $0 == i }.count)
(0..<count).forEach{ _ in duplication.append(String(i)) }
}
if duplication.isEmpty {
return "-1"
}else if duplication.filter{ $0 == "0" }.count == duplication.count {
return "0"
}
return duplication.sorted(by: >).joined()
}
νμ΄ μκ°μ ν μκ°μ λ겨λ²λ Έμ§λ§, μ‘°κΈλ§ λ νλ©΄ ν릴 κ² κ°μμ κ³μ λΆμ‘κ³ μμλλ κ·Έ κ²°κ³Ό 10λΆ λ€μ ν΄κ²°ν μ μμλ€. νμ§λ§ 첫 νμ΄κ³Όμ μ κ²°κ³Όλ κ·Έμ μ²μ°Ένλ€.
λμ ν λκ° λ¬Έμ μΈμ§ λ°λ‘λ₯Ό μ°Ύμ μ μμ΄μ "μ§λ¬ΈνκΈ°"λ₯Ό μ°μ½ λ΄€λ€. λ΄κ° λμΉ λΆλΆμ Xμ Yμ λ¬Έμμ΄μ κΈΈμ΄μ μ΅λκ°μ΄ Intμ μ΅λκ°μ λμ΄κ°λ€λ μ¬μ€μ΄μλ€. μ²μμ “00” μ΄λ “000”, “” μ΄ μΆλ ₯λλ κ³Όμ μ ν΄κ²°νκΈ° μν΄μ guard let λ¬Έμ μ¨μ Int κ°μΌλ‘ λ°κΏλ²λ¦° ν λ€μ String μΌλ‘ λ°κΎΈλ €κ³ μλνλ€. κ·Έλ¬λ Int κ°μΌλ‘ λ°νλλ κ³Όμ μμ Intμ λ²μλ₯Ό λ²μ΄λ μ¬λ°λ₯Έ κ°μ΄ μΆλ ₯λμ§ μμλ κ²μ΄λ€.
μ΄λ₯Ό ν΄κ²°νκΈ°μν΄ Intλ‘ λ°κΎΈλ λμ ifλ¬Έμ 첨κ°νλ€. 첫 λ²μ§Έλ κ²ΉμΉλ μ«μλ§μ λμΆν duplicationλ°°μ΄μ΄ λΉμ΄μλμ§ νμΈ ν “-1”μ μΆλ ₯νλ κ²μ΄κ³ , λ λ²μ§Έλ λ¬Έμμ΄μμμ “0”μ κ°―μκ° λ¬Έμμ΄μ κΈΈμ΄μ κ°λ€λ©΄ “0”μ μΆλ ₯νλλ‘ νλ κ²μ΄λ€.
μ²μμ μΈλ°μλ forλ¬Έμ λλ κ²μ λ°©μ§νκΈ° μν΄ κ΅μ§ν© μ°μ°μ νμ©ν΄ λ λ°°μ΄μ 곡ν΅λ κ°μ μ°Ύμλ€. μ΄ λΆλΆμ΄ μκ°μ μ€μΌ μ μλλ‘ λμμ€ κ² κ°λ€.
λ€λ₯Έ μ¬λ νμ΄
import Foundation
func solution(_ X:String, _ Y:String) -> String {
let arr1 = Array(X)
let arr2 = Array(Y)
let uniqueKey = Set(arr1).intersection(Set(arr2))
var answer = ""
for key in uniqueKey.sorted(by: >) {
answer += String(repeating: key, count: min(arr1.filter{$0 == key}.count, arr2.filter{$0 == key}.count))
}
return answer == "" ? "-1" : ((uniqueKey.count == 1 && uniqueKey.contains("0")) ? "0" : answer)
}
νμ΄ λ°©λ²μ λΉμ·νλ answerμ κ°μ λ΄λ¦Όμ°¨μμΌλ‘ λμΆνμ¬ Stringμ + μ°μ°μ νμ©ν΄ λ°λ‘ answerμ λ§λ€μ΄ λλ€λ μ μ΄λ€.
duplication.sorted(by: >).joined() μ΄ κ³Όμ μ μλ΅ν μ μμ΄μ μ’ λ ν¨μ¨μ μΈ νμ΄ λ°©λ²μΈ κ² κ°λ€.
μ€μν κ°λ
- Aμ Bμ κ΅μ§ν©κ΅¬νκΈ°
A.intersection(B)