본문 바로가기

Problem Solving/[Java] Programmers

(8)
[Java] 프로그래머스: 베스트앨범 개요스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개 모아 베스트 앨범을 출시하려 한다.노래는 고유 번호로 구분된다.노래를 수록하는 기준속한 노래가 많이 재생된 장르를 먼저 수록장르 내에서 많이 재생된 노래를 먼저 수록장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록 알 수 없음 String[] genres: 노래의 장르genres[i]: 고유번호가 i인 노래의 장르길이: 1 ~ 10,000(10^4)종류: 1 ~ 99int[] plays: 노래별 재생 횟수plays[i]: 고유번호가 i인 노래가 재생된 횟수길이: 1 ~ 10,000(10^4)※ genres와 plays의 길이는 같다. -> 둘 다 곡에 대한 정보이기 때문※ 모든 장르는 재생된 횟수가 다르다. ..
[Java] 프로그래머스: 디스크 컨트롤러 - 람다식 활용 개요하드 디스크는 한 번에 하나의 작업만 수행할 수 있다.우선순위 디스크 컨트롤러를 구현해야한다.어떤 작업 요청이 들어왔을 때, 작업의 번호, 작업의 요청 시각, 작업의 소요 시간을 저장해 두는 대기 큐가 존재.이 큐는 처음에는 비어있다.디스크 컨트롤러는 하드디스크가 쉬고 있고, 대기 큐에 작업이 있을경우 우선순위가 높은 작업을 디스크에게 수행시킨다.우선순위가 높은 것: 작업의 소요시간이 짧은 것, 작업의 요청 시각이 빠른 것, 작업의 번호가 작은 것하드디스크는 작업을 한 번 시작하면 작업을 마칠 때까지 그 작업만 수행한다.하드디스크는 작업을 마치자마자 바로 다음 작업 수행이 가능하다.각 작업에 대한 반환 시간: 작업 요청부터 종료까지 걸린 시간  알 수 없음 작업의 정보가 담겨있는 int[][] job..
[Java] 프로그래머스: 디스크 컨트롤러 개요하드 디스크는 한 번에 하나의 작업만 수행할 수 있다.우선순위 디스크 컨트롤러를 구현해야한다.어떤 작업 요청이 들어왔을 때, 작업의 번호, 작업의 요청 시각, 작업의 소요 시간을 저장해 두는 대기 큐가 존재.이 큐는 처음에는 비어있다.디스크 컨트롤러는 하드디스크가 쉬고 있고, 대기 큐에 작업이 있을경우 우선순위가 높은 작업을 디스크에게 수행시킨다.우선순위가 높은 것: 작업의 소요시간이 짧은 것, 작업의 요청 시각이 빠른 것, 작업의 번호가 작은 것하드디스크는 작업을 한 번 시작하면 작업을 마칠 때까지 그 작업만 수행한다.하드디스크는 작업을 마치자마자 바로 다음 작업 수행이 가능하다.각 작업에 대한 반환 시간: 작업 요청부터 종료까지 걸린 시간  알 수 없음 작업의 정보가 담겨있는 int[][] job..
[Java] 프로그래머스: 가장 큰 수 개요0 또는 양의 정수가 담긴 배열 numbers가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내라. 알 수 없음 int[] numbers: 0 또는 자연수가 들어있는 배열 (1 ~ 100,000, 10^5)각 원소의 값: 0 ~ 1,000(10^3) 정답은 String으로 리턴하라.  문제 풀이처음에는 정수 각 자리수를 문자로 변경한 뒤에,문자 배열에 넣고 정렬하는 식으로 문제에 접근했는데,  문제에서 요구하는 사항은 주어진 정수를 분해하는 것은 아니었으므로 잘못된 접근이었다.  결국 문자열로 바꾼 뒤 정렬하는 것이라고 생각했는데-> 사전 순으로 나열하면 왠지 될 것 같아서?  단순히 문자열 배열을 내림차순으로 정렬할 경우문자열끼리 직접 비교하게 되므로 두 번째 예제에서953430..
[Java] 프로그래머스: K번째수 개요배열 array의 i번째 숫자부터 j번째 숫자까지 정렬했을 때, k번째에 있는 수를  구하라 알 수 없음 int[] array: 숫자를 원소로 가지는 배열길이: 1 ~ 100, 10^2각 원소의 값: 1 ~ 100, 10^2int[][] commands: [i,j,k]를 원소로 가진 2차원 배열 길이: 1 ~ 50, 10^1 commands의 모든 원소에 대해 연산을 적용했을 때 나온 결과를 배열에 담아 return하라.   문제 풀이단순히 Array를 i부터 j까지 자른 뒤에, 정렬하고, k번째 위치를 구하면 되는 문제였습니다.이때 주의할 점은 문제는 인덱스를 1부터 시작한다는 겁니다. 핵심 메서드는 다음과 같습니다.int[] arr = Arrays.copyOfRange(array, front, e..
[Java] 프로그래머스: 전화번호 목록 문제 이해전화번호부에 여러 번호가 적혀있다.한 번호가 다른 번호의 접두어인지 확인하려고 한다. 알 수 없음 phone_book: 전화번호의 목록 (1 ~ 1,000,000, 10^6)※ 각 전화번호의 길이는 1 ~ 20※ 같은 전화번호는 들어있지 않다 -> 중복 X 접두어가 있으면 true, 없으면 false를 리턴하라  문제 풀이알고리즘 고득점 Kit 해시 태그에 있던 문제이니만큼처음에는 Hash를 이용한 컬랙션으로 접근했다.  이 문제는 전화번호라는 하나의 값에 대해서만 다루므로 HashSet을 사용했다.  핵심 풀이는 다음과 같다.1. 먼저 HashSet에 전화번호 목록을 넣어놓는다.Set set = new HashSet();for(String str: phone_book){ set.add(s..
[Java] 프로그래머스: 완주하지 못한 선수 문제 이해마라톤 선수들이 단 한명의 선수를 제외하고는 모두 마라톤을 완주했다.완주하지 못한 선수의 이름을 return하라. 알 수 없음 participant: 마라톤에 참여한 선수들의 이름이 담긴 배열 (1 ~ 100,000, 10^5)completion: 마라톤에 완주한 선수들의 이름이 담긴 배열 (1 ~ 100,000, 10^5)※ 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 구성※ 동명이인이 있을 수 있음. 완주하지 못한 선수의 이름을 return하라.  문제 풀이동명이인이 없었다면 단순히 Set으로 해결할 수 있겠지만,동명이인이 존재하기에 '각 이름마다 몇 명 있는지' 체크를 해줄 필요가 있습니다.그렇기에 HashMap을 써서 문제를 해결했습니다.  전체 코드import java.ut..
[Java] 프로그래머스: 폰켓몬 문제 이해연구실에 있는 N마리의 폰켓몬 중에서 N/2마리를 가져갈 수 있습니다. 폰켓몬은 종류에 따라 번호를 붙여 구분합니다.당신은 최대한 다양한 종류의 폰켓몬을 가지길 원합니다. 알 수 없음 nums: 폰켓몬의 종류 번호 (1 ~ 10,000, 10^4)※ 항상 짝수로 주어짐※ 종류 번호: 1 ~ 200,000 N/2마리의 폰켓몬을 선택하는 방법 중 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아,그때의 폰켓몬 종류 번호의 개수를 return하시오.※ 선택하는 방법이 여러 가지여도 한 가지 케이스만 return하라.  문제 풀이우리가 신경써야 할 건 폰켓몬의 종류밖에 없다.  중복되어서 입력된 값들을 제거만 할 수 있다면 무엇이든 상관없는 문제였다.나는 Collections의 Set을 사용하는 방법과 ..