새소식

코딩테스트/프로그래머스

[Swift] 신고 결과 받기

  • -

[문제]

코딩테스트 연습 - 신고 결과 받기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 풀이]

자신이 신고를 한 유저 중 신고를 k번 이상 당한 유저가 몇명이 있는지를 파악하는 문제이다.

해당 문제를 풀기 위해서 단계에 걸쳐서 문제를 풀었다.

1. 문자열 나누기를 통해서 신고한 유저와 신고당한 유저 나누기.

2. 신고를 한 사람은 같은 사람을 1번만 가능하게 중복 제거하기.

3. 신고를 몇번 당했는지 체크해주기.

4. 만일 신고를 k번 이상 당했다면 신고한 사람의 value 증가해주기.

5. id_list를 방문하면서 해당 사람의 value 값 answer에 넣기.

 

의 다섯 단계로 나누어서 해당 문제를 풀었다.

[회고]

한번에 할려고 하면 어려울 수 있지만 단계별로 나누어서 천천히 접근하면 어렵지 않게 느껴질 만한 문제이다.

천천히 하지만 확실히 접근하면서 문제를 풀자.

[코드]


import Foundation

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

    //set을 사용해서 중복값을 제거하자.
    var reports = Set<[String]>()
    
    //reports 안에 report 문자열 파싱해서 넣기.
    for i in report {
        var temp: [String] = i.split(separator: " ").map {String($0)}
        reports.insert(temp)
    }
    
    //몇번을 지목받았는지 확인할 변수
    var numTarget = [String: Int]()
    //자기가 지목한 사람중 몇명이 k를 넘었는지 저장할 변수
    var numId = [String: Int]()
    
    //변수 초기화
    for i in id_list {
        numTarget[i] = 0
        numId[i] = 0
    }
    
    //지목받으면 + 해주기
    for i in reports {
        numTarget[i[1]]! += 1
    }
    
    //k이상 지목받았으면 지목한 사람의 변수 + 1
    for i in reports {
        if(numTarget[i[1]]! >= k){
            numId[i[0]]! += 1
        }
    }
    
    //id_list를 순회하면서 순서대로 몇명 정지 가능한지 변수에 저장.
    for i in id_list {
        answer.append(numId[i]!)
    }
    
    return answer
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[Swift] 성격 유형 검사하기  (0) 2023.08.15
[C++] 성격 유형 검사하기  (0) 2023.08.15
[C++] 신고 결과 받기  (0) 2023.08.14
[Swift] 과일 장수  (0) 2023.08.13
[Swift] 달리기 경주  (0) 2023.08.12
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.