본문 바로가기

프로그래머스9

프로그래머스 42579번 베스트앨범 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42579 풀이 예전에 푼 문제를 다시 풀었는데, 예전의 풀이(풀이1)가 더 성능이 좋았다. 풀이1 : 장르별로 묶어서 장르 내에서 각각 sorting 후 장르별로 상위2개씩 return 풀이2 : 장르에 대한 총 재생수만 hashmap으로 저장 후, 전체 sorting, 장르별로 상위2개씩 return 풀이1 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; class Solution { class Genre { int sum; ArrayList.. 2022. 7. 31.
프로그래머스 42578번 위장 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42578 풀이 이 문제를 한 마디로 요약하면, 옷 종류별 조합의 갯수를 구하는 것이다.(부위별로 안 입는 경우 포함, 모두 안 입을 수 없음) 풀이 순서는 아래와 같다. 1. HashMap을 이용하여 옷 종류별로 개수 카운트 - O(n) 2. 옷 종류별로 조합의 수를 계산 - O(4) (최악의 경우 옷의 종류는 4종이므로) import java.util.HashMap; class Solution { public int solution(String[][] clothes) { int answer = 1; //옷 종류별 가짓수 HashMap clothesCount = new HashMap(); for.. 2022. 7. 26.
프로그래머스 42577번 전화번호 목록 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42577 풀이 이 문제는 "해시" 카테고리에 있지 않았다면 못 풀었을 것 같은 문제였다고 생각한다. 성능 테스트를 통과하려면, HashMap의 탐색 시간 복잡도가 O(1) 인 것을 최대한 이용해야 한다. 그럼 HashMap의 key, value를 무엇으로 정해야 할까? => 전화번호의 substring을 key, 전화번호의 길이를 value로 잡고 모두 저장하면, 전화번호가 다른 전화번호의 접두어인지 O(1)로 확인할 수 있다. 1. 모든 전화번호에 대해 를 HashMap에 저장한다. substring이 동일한데, 전화번호 길이가 더 길다면, 값을 갱신한다. => O(n * 20) 2. phon.. 2022. 7. 18.
프로그래머스 42576번 완주하지 못한 선수 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42576 풀이 1. participant의 내용은 completion의 내용을 포함하며, 1개 더 많다. participant를 HashMap에 담고, completion으로 소거하는 방법을 쓰게 되면, completion을 모두 소거 후, 찾는 과정이 생기게 되므로, completion을 HashMap에 담는다. (O(n-1)) 2. participant를 순회하며, completionCount HashMap에서 탐색 및 소거시킨다. 2-1. 만약 count값이 이미 0이거나, null이면 완주하지 못한 선수이므로, 반환하면 된다. import java.util.HashMap; class So.. 2022. 7. 16.