First Solution - Double for Loop has time complexity of O(n^2) due to the nested loop func whatFlavors(cost: [Int], money: Int) -> Void { // Write your code here /** cost: [1, 4, 5, 3, 2] money: 4 */ var chosenFlavorIds: [String] = [] for (i, item) in cost.enumerated() { for (j, item2) in cost.enumerated() { if (item + item2 == money) && i != j { // print("\(item) in idx \(i+1) and \(item2) in idx \(j+1)") chosenFlavorIds.append("\(i+1) \(j+1)") } } } print(chosenFlavorIds[0]) // Print yang pertama aja } Second Attempt - Hash Table ! had help from bard to understand this concep func whatFlavors(cost: [Int], money: Int) -> Void { // Write your code here /** cost: [1, 4, 5, 3, 2] money: 4 */ var cost_dictionary: [Int: Int] = [:] // 1. Initialize Hash Table for (i, item) in cost.enumerated() { // Key nya adalah kekurangan yang harus diisi, valuenya adalah index dari item yang sudah dikurangi cost_dictionary[money - item] = i /* cost_dictionary = { 4-1 : 0 4-4 : 1 4-5 : 2 4-3 : 3 4-2 : 4 } cost_dictionary = { 3 : 0 0 : 1 -1 : 2 1 : 3 2 : 4 } */ } // 2. Loop through the costs for (i, item) in cost.enumerated() { // Cari index dari current item var complement_idx: Int? = cost_dictionary[item] /* i = 0, complement_idx = cost_dictionary[1] = 3 i = 1, complement_idx = cost_dictionary[4] = - i = 2, complement_idx = cost_dictionary[5] = - i = 3, complement_idx = cost_dictionary[3] = 0 i = 4, complement_idx = cost_dictionary[2] = 4 */ if let complement_idx = complement_idx { // Karena harus distinct, maka index nya gaboleh sama if complement_idx != i { // Ditambah 1 karena mintanya index (flavor id) mulai dari 1 print("\(i+1) \(complement_idx + 1)") break // Karena cuman diminta nya satu berarti kalo udh dapet ya selesai } } } }