가이버2
개발 블로그
가이버2
전체 방문자
오늘
어제
  • 분류 전체보기 (172)
    • 교육 (115)
      • 백엔드 (14)
      • 프론트 (2)
      • 네트워크 관련 (4)
      • 데이터 관련 (3)
      • devops (3)
      • 그외 (3)
      • 알고리즘 (5)
      • 코테 (81)
    • 디버깅 (3)
      • 스프링 Data JPA (3)
      • JAVA (0)
    • 개발 편의 (8)
    • 기계 (25)
      • NAS (10)
      • ROUTER (0)
      • 맥북 (15)
    • 소프트웨어 (17)
      • WIN (4)
      • MAC (13)
      • LINUX (0)
    • 생활 (0)
      • 구매 (0)
      • 오월이 (0)
    • 링크 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • naelonambul 개발 블로그 입니다.

인기 글

태그

  • 인프런
  • M1
  • 가상화
  • 스프링
  • JS
  • 맥미니
  • 윈도우
  • Spring
  • Java
  • 프로그래머스
  • WSL
  • intellij
  • 맥북
  • 시놀로지
  • 코딩테스트
  • ARM
  • M4
  • SQL
  • 맥
  • SSD

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
가이버2

개발 블로그

교육/코테

[프로그래머스]JAVA 베스트앨범 -해시

2022. 7. 6. 00:03

참고 : playCount.entrySet().stream()
            .sorted((v1, v2) -> v2.getValue() - v1.getValue())
            .map(v -> v.getKey())

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

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

programmers.co.kr

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(String[] genres, int[] plays) {
        int[] answer = {};
        
        //장르, 곡리스트
        Map<String, List<Song>> genreSongs = new HashMap<>();

        //초기값
        for(int i=0; i< genres.length; i++){
            genreSongs.put(genres[i], new ArrayList<>());
        }

        //장르 리스트에 곡 추가.
        for(int i=0; i< genres.length; i++){
            genreSongs.get(genres[i]).add(new Song(i, plays[i]));
        }

        //장르 리스트 정렬
        for (String s : genreSongs.keySet()) {
            List<Song> songs = genreSongs.get(s);
            songs.sort((v1, v2)->v2.plays - v1.plays);
        }

        //장르 총 플레이수 리스트
        Map<String, Integer> playCount = new HashMap<>();
        for (String s : genreSongs.keySet()) {
            List<Song> songs = genreSongs.get(s);
            for (Song song : songs) {
                playCount.put(s, playCount.getOrDefault(s, 0)+ song.plays);
            }
        }

        //총 플레이수 정렬로 큰순서 대로 장르 추가.
        List<String> collect = playCount.entrySet().stream()
                .sorted((v1, v2) -> v2.getValue() - v1.getValue())
                .map(v -> v.getKey())
                .collect(Collectors.toList());

        //곡 인덱스 리스트 생성후 최대 2개 추가.
        List<Integer> indexes = new ArrayList<>();
        for (String s : collect) {
            List<Song> songs = genreSongs.get(s);
            if(songs.size() >= 2){
                indexes.add(songs.get(0).getIndex());
                indexes.add(songs.get(1).getIndex());
            }else{
                indexes.add(songs.get(0).getIndex());
            }
        }
        
        //변환
        answer = indexes.stream().mapToInt(v -> v).toArray();
        
        return answer;
    }
    
        public class Song{
        int index;
        int plays;

        public Song(int index, int plays){
            this.index = index;
            this.plays = plays;
        }

        public int getIndex() {
            return index;
        }

        @Override
        public String toString() {
            return "Song{" +
                    "index=" + index +
                    ", plays=" + plays +
                    '}';
        }
    }
}

'교육 > 코테' 카테고리의 다른 글

[프로그래머스]JAVA 다리를 지나는 트럭 -스택/큐  (1) 2022.07.06
[프로그래머스]JAVA 프린터 -스택/큐  (0) 2022.07.06
[프로그래머스]JAVA 위장-해시  (0) 2022.07.05
[프로그래머스]JAVA 전화번호 목록 - 해시  (0) 2022.07.05
[프로그래머스]JAVA 완주하지 못한 선수-해시  (0) 2022.07.05
    '교육/코테' 카테고리의 다른 글
    • [프로그래머스]JAVA 다리를 지나는 트럭 -스택/큐
    • [프로그래머스]JAVA 프린터 -스택/큐
    • [프로그래머스]JAVA 위장-해시
    • [프로그래머스]JAVA 전화번호 목록 - 해시
    가이버2
    가이버2
    개인 개발 블로그 입니다.

    티스토리툴바