-
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ Level1 (Swift)Algorithm 2022. 2. 6. 23:40
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ
๋ฌธ์ ์ค๋ช ์ ์ ์ฌ์ ๋ฌด์ง๋ ๊ฒ์ํ ๋ถ๋ ์ด์ฉ์๋ฅผ ์ ๊ณ ํ๊ณ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ผ๋ก ๋ฐ์กํ๋ ์์คํ ์ ๊ฐ๋ฐํ๋ ค ํฉ๋๋ค. ๋ฌด์ง๊ฐ ๊ฐ๋ฐํ๋ ค๋ ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ฐ ์ ์ ๋ ํ ๋ฒ์ ํ ๋ช ์
programmers.co.kr
๋ฌธ์ ํ์ด
ํ๋ก๊ทธ๋๋จธ์ค์์ Level1 ๋ฌธ์ ์ค ์ ์ผ ๋ง์ง๋ง์ผ๋ก ๋จ์๋ ๋ฌธ์ .. ๋ญ๊ฐ ๊ทธ๋์ ๋ ์ด๋ ค์ด? ๋๋์ผ๋ก ๋ค๊ฐ์ค์ง ์์๋.. ์ถ๊ธฐ๋.. 1์ฐจ ์๋๋ ๋ต์ด ๋์์ง๋ง ๊ณ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋์๋ค. Dictionary, Set์ ์กฐ๋ง๊ฐ ๋ค์ ์ ๋ฆฌํด์ผ๊ฒ ๋ค.
1์ฐจ ์๋
์ฒ์ ์๋ํ ์ฝ๋๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋์๋ค. ์ค๋ณต ์ ๊ณ ๋ฅผ ๋ง๊ธฐ ์ํด report๋ฅผ Set์ผ๋ก ๋ณํํ์ฌ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋๋ฐ, ์๋ฌด๋๋ ์ ๊ณ ๋นํ ํ์๋ฅผ ์ฒดํฌํ๋ฉด์ ์ด๋ฉ์ผ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ์์ด์ ๋ญ๊ฐ ๋ฌธ์ ๊ฐ ์์ง ์์๋ ์ถ๋ค...
2์ฐจ ์๋
๋จผ์ emailResult์ ์ด๋ฉ์ผ ๊ฒฐ๊ณผ๋ฅผ [String: Int] ํํ๋ก ์ ์ฅํ๋๋ฐ, String์๋ ์ ์ ์ด๋ฆ, Int์๋ ๋ฐ์ ์ด๋ฉ์ผ ์๋ฅผ ์ ์ฅํ๋ค. for ๋ฌธ์ผ๋ก ์ ์ ์ด๋ฆ์ ์ถ๊ฐํ๊ณ , ์ด๋ฉ์ผ ์๋ ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
var emailResult = [String: Int]() // ์ด๋ฉ์ผ ๊ฒฐ๊ณผ ์ ์ฅ for i in 0..<id_list.count { emailResult.updateValue(0, forKey: id_list[i]) }userInfoDic์ด๋ผ๋ ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค์ด์ Key์๋ ์ ๊ณ ๋นํ ์ ์ ID๋ฅผ, Value์๋ ์ ๊ณ ๋นํ ์ ์ ID๋ฅผ ์ ๊ณ ํ ๋ชจ๋ ์ ์ ID๋ฅผ ์ ์ฅํ๋ค.
var userInfoDic = [String: [String]]() // [์ ๊ณ ๋นํ ์ ์ ID: [์ ๊ณ ํ ์ ์ ID]]for ๋ฌธ์ ๋๋ฉด์ report๋ฅผ ํตํด ์ฒ๋ฆฌํ๋๋ฐ, ์ฌ๊ธฐ์ userInfoDic์ ๊ตฌํด์ค๋ค.
๋จผ์ report๋ฅผ userId์ targetId๋ก ๋๋๊ณ , 2๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ์ ์ฒดํฌํ๋ค.
userInfoDic์ targetId๋ฅผ ๊ฐ์ง ํค๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ
- ํ ์ ์ ๊ฐ ๋์ผํ ์ ์ ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ๊ณ ํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด, targetId๋ฅผ ๊ฐ์ง ํค๊ฐ ๊ฐ์ผ๋ก userId๋ฅผ ๊ฐ๊ณ ์๋์ง ํ์ธํ๋ค. ๊ฐ๊ณ ์์ง ์์ ๊ฒฝ์ฐ userId๋ฅผ ์ถ๊ฐํด์ค๋ค.
userInfoDic์ targetId๋ฅผ ๊ฐ์ง ํค๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ
- ํด๋น ํค (targetId)๋ฅผ ์ถ๊ฐํ๊ณ , ๊ฐ์ผ๋ก userId (์ ๊ณ ํ ์ ์ ID)๋ฅผ ์ถ๊ฐํ๋ค.
for i in report { let reportArr = i.components(separatedBy: " ").map { String($0) } let userId = reportArr[0] // ์ ๊ณ ํ ์ ์ ID let targetId = reportArr[1] // ์ ๊ณ ๋นํ ์ ์ ID if userInfoDic[targetId] == nil { userInfoDic.updateValue([userId], forKey: targetId) } else { if !userInfoDic[targetId]!.contains(userId) { userInfoDic[targetId]!.append(userId) } } }๊ทธ๋ฆฌ๊ณ ์ด๋ฉ์ผ ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด userInfoDic.keys๋ก for๋ฌธ์ ๋๋ฆฐ๋ค.
์ด ๋ userInfoDic์ ํค๊ฐ ๊ฐ๊ณ ์๋ ๊ฐ์ด k๊ฐ ์ด์์ด๋ผ๋ฉด, ํด๋น ํค๋ฅผ ๊ฐ๋ ์ ์ ๋ค์ ์ฐพ์์ emailResult์ ์ด๋ฉ์ผ ์๋ฅผ +1 ํด์ค๋ค.
for targetId in userInfoDic.keys { if userInfoDic[targetId]!.count >= k { for n in userInfoDic[targetId]! { emailResult[n]! += 1 } } }๋ง์ง๋ง์ผ๋ก, id_list์์ ์ ์ ๋ชฉ๋ก์ ์ฐจ๋ก๋๋ก for ๋ฌธ์ผ๋ก ๋๋ฆฌ๋ฉด์ emailResult[id]์ ๊ฐ์ ์๋ก์ด ans ๋ฐฐ์ด์ ์ฐจ๋ก๋๋ก ์ถ๊ฐํด์ ans๋ฅผ ๋ฆฌํดํ๋ฉด ์ ๋ต์ด๋ค.
var ans = [Int]() for id in id_list { ans.append(emailResult[id]!) }์์ค ์ฝ๋ (Swift)
// // แแ ตแซแแ ฉแแ งแฏแแ ชแแ กแฎแแ ต.swift // Programmers // // Created by ์์ํฌ on 2022/02/06. // import Foundation func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] { var emailResult = [String: Int]() // ์ด๋ฉ์ผ ๊ฒฐ๊ณผ ์ ์ฅ for i in 0..<id_list.count { emailResult.updateValue(0, forKey: id_list[i]) } var userInfoDic = [String: [String]]() // [์ ๊ณ ๋นํ ์ ์ ID: [์ ๊ณ ํ ์ ์ ID]] for i in report { let reportArr = i.components(separatedBy: " ").map { String($0) } let userId = reportArr[0] // ์ ๊ณ ํ ์ ์ ID let targetId = reportArr[1] // ์ ๊ณ ๋นํ ์ ์ ID if userInfoDic[targetId] == nil { userInfoDic.updateValue([userId], forKey: targetId) } else { if !userInfoDic[targetId]!.contains(userId) { userInfoDic[targetId]!.append(userId) } } } for targetId in userInfoDic.keys { if userInfoDic[targetId]!.count >= k { for n in userInfoDic[targetId]! { emailResult[n]! += 1 } } } var ans = [Int]() for id in id_list { ans.append(emailResult[id]!) } return ans }'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๋ฐฑ์ค 2003 ์๋ค์ ํฉ 2 (C++) (0) 2023.05.01 [Algorithm] BFS & DFS (0) 2022.03.15 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค [์นด์นด์ค ์ธํด] ํคํจ๋ ๋๋ฅด๊ธฐ Level1 (Swift) (0) 2022.02.06 [Algorithm] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (Swift/C++) (0) 2022.02.01 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์คํจ์จ Level1 (Swift) (0) 2022.02.01