[프로그래머스] Lv.1 신고 결과 받기 (Swift) 문제풀이

Cobugi·2022년 6월 18일
1

알고리즘

목록 보기
11/11
post-thumbnail

[프로그래머스] Lv.1 신고 결과 받기

풀이

  • 첫 번째 예시로 설명

1) report[[String]]로 분해한다

let setReport = Set(report).map { $0.split(separator: " ").map { String($0) } }

// ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"]
// ---> [["frodo", "neo"], ["muzi", "neo"], ["muzi", "frodo"], ["apeach", "muzi"], ["apeach", "frodo"]]

2) [신고 당한 사람: [신고한 사람]]꼴의 딕셔너리(Dictionary)를 만든다

var reportDict = [String: [String]]()
    
for i in setReport {
	if reportDict[i[1]] == nil {
    	reportDict[i[1]] = [i[0]]
    } else {
    	reportDict[i[1]]!.append(i[0])
    }
}

// ---> ["frodo": ["apeach", "muzi"], "muzi": ["apeach"], "neo": ["frodo", "muzi"]]

2.5) [사람: 받을 메일 개수]꼴의 딕셔너리를 만든다

var mailDict = [String: Int]()

for i in id_list {
	mailDict[i] = 0
}

// ---> ["muzi": 0, "frodo": 0, "apeach": 0, "neo": 0]
// 나중에 메일 개수를 여기에 추가해주면 된다

3) 신고 당한 사람의 신고자의 수가 k 이상이면 mailDict에 신고자들에게 +1씩 해준다

  • 신고 당한 사람의 신고자의 수가 k 이상이란 뜻은 신고 당한 사람이 정지를 당한다는 뜻이자 신고자들에게 메일을 발송해야 한다는 뜻이다.
for value in reportDict.values {
	if value.count >= k {
		for i in value {
			mailDict[i]! += 1
		}
	}
}

// mailDict = ["muzi": 2, "frodo": 1, "apeach": 1, "neo": 0]

4) mailDict을 반환타입에 맞춰 반환하면 된다

var ret = [Int]()

for i in id_list {
	ret.append(mailDict[i]!)
}
    
return ret

전체 코드

import Foundation

func solution(_ id_list: [String], _ report: [String], _ k: Int) -> [Int] {
    
    let setReport = Set(report).map { $0.split(separator: " ").map { String($0) } }
    var reportDict = [String: [String]]()
    
    for i in setReport {
        if reportDict[i[1]] == nil {
           reportDict[i[1]] = [i[0]]
        } else {
            reportDict[i[1]]!.append(i[0])
        }
    }
        
    var mailDict = [String: Int]()
    
    for i in id_list {
        mailDict[i] = 0
    }
    
    for value in reportDict.values {
        if value.count >= k {
            for i in value {
                mailDict[i]! += 1
            }
        }
    }
    
    var ret = [Int]()
    
    for i in id_list {
        ret.append(mailDict[i]!)
    }
    
    return ret
}
profile
iOS Developer 🐢

0개의 댓글