강의로 돌아가기
최민수

테스트케이스는 다 합격인데.... 채점하면 거의 절반정도는 틀렸다고 나와요....ㅋㅋ 뭐가 문제일까요?

import java.util.HashMap;

class Solution {
public int[] solution(String[] genres, int[] plays) {

    HashMap<String, Integer> hm = new HashMap<>();
    for(int i = 0; i < genres.length; i++){
        hm.put(genres[i], hm.getOrDefault(genres[i], 0) + plays[i]);
    }
     int[] answer = new int[hm.size()*2];        

    String genreKey = "";
    int playValue = 0;    
    int uniqueNum = 0;
    int playCnt = 0;
    int uniqueNum2 = 0;
    int playCnt2 = 0;
    int forCnt = hm.size();

    // 장르 종류 수 만큼 반복
    for(int i = 0; i < forCnt; i++){
        // 변수 초기화
        genreKey = ""; // 장르
        playValue = 0;  // 
        uniqueNum = 0;
        playCnt = 0;
        uniqueNum2 = 0;
        playCnt2 = 0;

        // 총 재생회수가 가장 많은 많은 장르 구하기
        for (String key : hm.keySet()) {
            if (hm.get(key) > playValue){
                genreKey = key;
                playValue = hm.get(key);
            }
        }

        // 재생회수가 가장 많은 장르이고, 재생 회수가 가장 많은 곡의 고유번호 구하기
        for(int j = 0; j < genres.length; j++){
            if(genres[j].equals(genreKey) && plays[j] > playCnt ){
                playCnt = plays[j];
                uniqueNum = j;
            }
        }
        // 재생회수가 가장 많은 장르이고, 재생 회수가 두번째로 많은 곡의 고유번호 구하기
        for(int t = 0; t < genres.length; t++){
            if(genres[t].equals(genreKey) && plays[t] > playCnt2 && t != uniqueNum){

                System.out.println(genreKey + " " + plays[t] + " " + t);

                playCnt2 = plays[t];
                uniqueNum2 = t;
            }
        }
        // 이미 체크된 장르는 제거
        hm.remove(genreKey);

        answer[2*i] = uniqueNum;
        answer[2*i+1] = uniqueNum2;        
    }

    return answer;
}

}

환경은 자바구요 많이 부끄러운 코딩이지만... 너무 궁금해서 올려요. 한번 봐주세요.

테스트 케이스는
[classic, pop, classic, classic, pop, zazz, zazz], [500, 600, 150, 800, 2500, 2000, 6000], [6, 5, 4, 1, 3, 0]
[classic, pop, classic, classic, pop, zazz, zazz], [500, 600, 150, 800, 2500, 2100, 1000], [4, 1, 5, 6, 3, 0]
[classic, pop, classic, pop, classic, classic], [400, 600, 150, 2500, 500, 500], [3, 1, 4, 5]

요렇게 진행했습니다... 모두 맞다고 나오고요..

작성중인 코드―Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import java.util.HashMap;

class Solution {
    public int[] solution(String[] genres, int[] plays) {

        HashMap<String, Integer> hm = new HashMap<>();
        for(int i = 0; i < genres.length; i++){
            hm.put(genres[i], hm.getOrDefault(genres[i], 0) + plays[i]);
        }
         int[] answer = new int[hm.size()*2];        

        String genreKey = "";
        int playValue = 0;    
        int uniqueNum = 0;
        int playCnt = 0;
        int uniqueNum2 = 0;
        int playCnt2 = 0;
        int forCnt = hm.size();

        // 장르 종류 수 만큼 반복
        for(int i = 0; i < forCnt; i++){
            // 변수 초기화
            genreKey = "";
            playValue = 0;    
            uniqueNum = 0;
            playCnt = 0;
            uniqueNum2 = 0;
            playCnt2 = 0;

            // 총 재생회수가 가장 많은 많은 장르 구하기
            for (String key : hm.keySet()) {
                if (hm.get(key) > playValue){
                    genreKey = key;
                    playValue = hm.get(key);
                }
            }

            // 재생회수가 가장 많은 장르이고, 재생 회수가 가장 많은 곡의 고유번호 구하기
            for(int j = 0; j < genres.length; j++){
                if(genres[j].equals(genreKey) && plays[j] > playCnt ){
                    playCnt = plays[j];
                    uniqueNum = j;
                }
            }
            // 재생회수가 가장 많은 장르이고, 재생 회수가 두번째로 많은 곡의 고유번호 구하기
            for(int t = 0; t < genres.length; t++){
                if(genres[t].equals(genreKey) && plays[t] > playCnt2 && t != uniqueNum){

                    System.out.println(genreKey + " " + plays[t] + " " + t);

                    playCnt2 = plays[t];
                    uniqueNum2 = t;
                }
            }
            // 이미 체크된 장르는 제거
            hm.remove(genreKey);

            answer[2*i] = uniqueNum;
            answer[2*i+1] = uniqueNum2;        
        }

        return answer;
    }
}
1 개의 답변
JandB

일단 다 분석하지는 않았는데요. 조건하나가 무조건 안 맞을 수 밖에 없는거 같아요. [장르에 속한 곡이 하나라면, 하나의 곡만 선택합니다.]<< 이조건이요. int[] answer = new int[hm.size()*2]; 이렇게 초기화 하시면 같은장르에 무조건 2개이상씩 있다는 가정을 하신거 같은데요. 장르가 1개면 불필요한 초기값인 '0'이 들어가지 않을까요? ㅎㅎ 저도 실력이 썩 좋지 못해서 ...

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.