Uknow's Lab.
article thumbnail

 


문제 링크

https://devdange.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%A0%EA%B3%A0-%EA%B2%B0%EA%B3%BC-%EB%B0%9B%EA%B8%B0-for-Java-HashMap-%EB%A5%BC-%EC%A0%81%EC%9A%A9%ED%95%9C-%ED%92%80%EC%9D%B4

 

[프로그래머스] 신고 결과 받기 for Java - HashMap 를 적용한 풀이

문제 바로가기 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스

devdange.tistory.com

 

 


 

문제 풀이

        var answer: IntArray = IntArray(id_list.size) { 0 }
        var newReport = report.distinct()

        val notifier = Array(newReport.size) { "" }
        val notified = Array(newReport.size) { "" }

        var warningCnt = IntArray(id_list.size) { 0 }

answer는 정답을 담고있는 배열,

newReport는 중복을 제거한(코틀린의 distinct 사용) 새 배열이며,

 

신고자와 신고당한자를 notifier와 notified, 두 개의 별도의 배열로 분리하였으며,

 

신고횟수를 담은 warningCnt를 새로 생성하였다.

 

 

for (i in newReport.indices) warningCnt[id_list.indexOf(notified[i])]++

신고 당한 사람의 warningCnt를 1씩 늘린다

 

 

        for (i in notified.indices) {
            if (warningCnt[id_list.indexOf(notified[i])] >= k) {
                answer[id_list.indexOf(notifier[i])]++
            }
        }

신고당한 사람(notifired)이 k회 이상 신고 당하였을 경우, 신고자(notifier의 id_list index값을 찾아 answer를 1씩 늘린다. 

 

 


전체 소스

class Solution {
    fun solution(id_list: Array<String>, report: Array<String>, k: Int): IntArray {
        var answer: IntArray = IntArray(id_list.size) { 0 }
        var newReport = report.distinct()

        val notifier = Array(newReport.size) { "" }
        val notified = Array(newReport.size) { "" }

        var warningCnt = IntArray(id_list.size) { 0 }
        
        for (i in newReport.indices) {
            notifier[i] = newReport[i].trim().split(" ")[0]
            notified[i] = newReport[i].trim().split(" ")[1]
        }

        // 신고 당한 횟수
        for (i in newReport.indices) warningCnt[id_list.indexOf(notified[i])]++
        
        for (i in notified.indices) {
            //신고당한 횟수가 k 이상일 경우 증가
            if (warningCnt[id_list.indexOf(notified[i])] >= k) {
                answer[id_list.indexOf(notifier[i])]++
            }
        }

        return answer
    }
}

 

 


마치며

코틀린이 익숙치 않다보니 사실 문제 푸는것보다 배열 다루는데 더 오래 걸렸던것 같다...

자바처럼 그저 int arr = new int[3]; 과 같이 간결하게 선언했으면 좋겠는데

생각보다 선언 방식이나 다루는 방식이 굉장히 낮설어 헤메었던것 같다....

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.