알고리즘문풀 with SWIFT/Programmers

swift ) 프로그래머스 - 22카카오블채 - 신고 결과 받기

유사앱등이 2022. 6. 23. 05:39

 

와우,.........

어려웠음...

이게...... 카카오?

이게..... 내 수준?

 

 

두 가지 코드 작성함

물론 하나는 시간초과.. 

테스트코드 24개 중 1개 시간초과,...

피가 말라요...

 

접근방법을 다르게 해서 두 번째 코드 작성......

성공.......


 

1. 시간초과난 코드

// 22카카오 - 신고결과받기 - 3번 시간초과

import Foundation

func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {

	var reported = [String:Int]()
	var user = [String:[String]]()
	var suspended = [String]()

	for i in id_list { //전체 이용자 딕셔너리
		reported[i] = 0
	}

	// 중복신고 제거, user에 넣기.
	var a = Array(Set(report.map{String($0)}))

	for i in a {
		let s = i.split(separator: " ").map{String($0)}

		if user[s[0]] == nil {
			user[s[0]] = [s[1]]
		} else {
			user[s[0]]!.append(s[1])
		}

		reported[s[1]]! += 1
	}

	// reported 딕셔너리에서 k만큼 신고받은 유저 찾기 -> suspended

	for i in id_list {
		if reported[i]! >= k {
			suspended.append(i)
		}
	}

	// 정지결과 메일 받을 유저 탐색
	var result = [Int]()

	for i in id_list {
		var count = 0
		for j in suspended {
			if user[i] != nil {
				if user[i]!.contains(j) {
					count += 1
				}
			}
		}
		result.append(count)
	}

	return result
}

 

 

 

2. 통과코드

// 22카카오 - 신고결과받기 -2

import Foundation

func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
	
	var userGetMail = [String:Int]()
	var user = [String:[String]]()
	var result = [Int]()
	
	for i in id_list {
		userGetMail[i] = 0
	}

	// 중복신고 제거, user에 넣기&count 피신고자:[신고자]
	let a = Array(Set(report.map{String($0)}))

	for i in a {
		let s = i.split(separator: " ").map{String($0)}
		
		if user[s[1]] == nil {
			user[s[1]] = [s[0]]
		} else {
			user[s[1]]!.append(s[0])
		}
	}
	
	// k만큼 신고받은 유저 찾기, 정지결과 메일 받을 유저 탐색
	for i in user.keys {
		if user[i]!.count >= k {
			for j in user[i]! {
				userGetMail[j]! += 1
			}
		}
	}
	
	for i in id_list {
		result.append(userGetMail[i]!)
	}
	
	
	return result
}

 

 


 

휴식이 필요해..