본문 바로가기
알고리즘

[알고리즘] 5월 19일 알고리즘 연습(2문제)

by eigen96 2022. 5. 20.
728x90

 

Lv. 1 신고 결과 받기 -> (실패)

참고할만한 풀이.

1. Person객체를 만들어서 나를 신고한 사람 명단을 속성으로 가지고 있게 만든다.

2. Person객체들을 각각 String,Person객체를 타입으로 갖는 HashMap에 담는다.

3. HashMap의 신고당한 사람의 객체에 신고한사람의 이름을 추가한다.

4. 각 Person객체의 신고한사람의 수를 센다.

https://programmers.co.kr/learn/courses/30/lessons/92334

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

출처 : 프로그래머스

import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        ArrayList<User> users = new ArrayList<>();
        HashMap<String,Integer> suspendedList = new HashMap<>(); //<이름>
        HashMap<String,Integer> idIdx = new HashMap<String,Integer>(); // <이름, 해당 이름의 User 클래스 idx>
        int idx = 0;

        for(String name : id_list) {
            idIdx.put(name,idx++);
            users.add(new User(name));
        }

        for(String re : report){
            String[] str = re.split(" ");
            //suspendedCount.put(str[0], suspendedCount.getOrDefault(str[0],0)+1);
            users.get( idIdx.get(str[0])).reportList.add(str[1]);
            users.get( idIdx.get(str[1])).reportedList.add(str[0]);
        }

        for(User user : users){
            if(user.reportedList.size() >= k)
                suspendedList.put(user.name,1);
        }

         for(User user : users){
             for(String nameReport : user.reportList){
                 if(suspendedList.get(nameReport) != null){
                     answer[idIdx.get(user.name)]++;
                 }

             }
        }




        return answer;
    }
}

class User{
    String name;
    HashSet<String> reportList;
    HashSet<String> reportedList;
    public User(String name){
        this.name = name;
        reportList = new HashSet<>();
        reportedList = new HashSet<>();
    }
}

 

 

Lv. 1 로또의 최고 순위와 최저 순위 - (성공)

 

나의 풀이 : 

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
         //같은 번호수
        int dubNum = 0;
        
        int best = 0;
        int worst = 0;
        
        // 0 개수
        int zeroNumber = 0;

    
        //0개수 파악
        for(int num : lottos){
            if (num == 0){
                zeroNumber++;
            }
        }
        
        //현재 같은 번호 개수 파악
        for(int i = 0 ; i < 6 ; i++){
            for(int j = 0; j < 6 ; j++){
                //같은 번호가 있다면
                if (lottos[i] == win_nums[j]) {
                    dubNum++;
                    break;
                }
            }
        }
        
        int resultBest = zeroNumber + dubNum;
        if (resultBest > 6){
            resultBest = 6; //같을 수 있는 최대 개수는 6
        } 
        
        int resultWorst = dubNum;
        
        
        int[] answer = {Solution.ranking(resultBest), Solution.ranking(resultWorst)};
        
        
        
        return answer;
    }
    
     public static int ranking(int num){
        switch(num){
            case 0 : {
                return 6;
            }
            case 1 : {
                return 6;
            }
            case 2 : {
                return 5;
            }
            case 3 : {
                return 4;
            }
            case 4 : {
                return 3;
            }
            case 5 : {
                return 2;
            }
            case 6 : {
                return 1;
            }
        }
         
         return 0;
    }
}

 

728x90

댓글