본문 바로가기

알고리즘/PROGRAMMERS42

비밀지도(Lv.1) 문제 설명 입출력 예시 요약 2진수 형태로 변환 후 합치기 풀이 접근 방식 1. 2진수 형태로 변환 → toBinaryString()을 통해 decimal to binary 변환 2. 정사각형 배열의 크기만큼 빈공간은 공백으로 채우기 → StringBuilder의 insert() 메소드를 통해 문자열에 문자 채우기 코드리뷰 import java.util.*; class Solution { public String[] solution(int n, int[] arr1, int[] arr2) { String s1 = ""; String s2 = ""; List list = new ArrayList(); for(int i = 0; i < arr1.length; i++) { s1 = Integer.toBinary.. 2024. 3. 22.
의상(Lv.2) 문제 설명 입출력 예시 요약 각 의상의 카테고리마다 하나씩 다르게 착용하는 경우의 수 구하기 풀이 접근 방식 1. 각 카테고리에 해당하는 아이템의 개수 구하기 → 카테고리(key) : 개수(value) map 만들기(아무것도 착용하지 않는 경우의 수 추가) 2. 최소 하나의 의상은 착용해야 함 → 모든 카테고리에서 아무것도 고르지 않는 경우 제외 코드리뷰 import java.util.*; class Solution { public int solution(String[][] clothes) { HashMap map = new HashMap(); for(int i = 0; i < clothes.length; i++) { map.put(clothes[i][1], map.getOrDefault(clothes[.. 2024. 3. 22.
캐시(Lv.2) 문제 설명 입출력 예시 요약 캐시에 저장된 문자열과 비교(대소문자 구분x)해서 있다면 hit 없다면 miss 방식은 LRU 풀이 접근 방식 1. 캐시 크기로 분기점 생성 → 캐시 사이즈가 0이라면 all miss 2. 캐시에 저장된 문자열과 비교 → equalsIgnoreCase()를 통해 대소문자 구분 없이 비교 3. hit의 경우(= 캐시에 존재한다면) → remove()와 add()로 LRU 방식 구현 코드리뷰 import java.util.*; class Solution { public int solution(int cacheSize, String[] cities) { List list = new ArrayList(); int answer = 0; boolean find; for(int i = 0.. 2024. 3. 22.
기능개발(Lv.2) 문제 설명 입출력 예시 요약 배포 순서는 정해져 있는 상태에서 기능 개발이 완료된 프로세스는 함께 배포 풀이 접근 방식 1. 기능개발까지 남은 일 수 계산 → 남은 일 수 : (100 - 진행현황) / 속도 2. 배포단계에 있는 프로세스의 남은 일수와 같거나 적은 프로세스는 함께 배포 → Queue 형식으로 데이터 조회 코드리뷰 import java.util.*; class Solution { public int[] solution(int[] progresses, int[] speeds) { List remains = new ArrayList(); List answerList = new ArrayList(); for(int i = 0; i < progresses.length; i++) { int rema.. 2024. 3. 22.
튜플(Lv.2) 문제 설명 입출력 예시 요약 해당 문자열을 통해 튜플 구하기 * 여기서 튜플은 정해진 순서가 있고 중복되는 숫자가 없음 풀이 접근 방식 1. 문자열에서 서로 크기가 다른 집합을 떼서 배열에 담는다. → {{20, 111}, {111}} : {20, 111}과 {111}로 split 2. 해당 집합을 요소로 갖는 배열을 문자열의 길이 순으로 정렬한다. → Arrays.sort()에 람다식을 통한 정렬 3. set에 하나씩 담는다. → 두 번째 요소부터는 "," 기준으로 split후 하나씩 담기 코드리뷰 import java.util.*; class Solution { public int[] solution(String s) { HashSet set = new LinkedHashSet(); List answ.. 2024. 3. 22.
피로도(Lv.2) 문제 설명 입출력 예시 요약 던전을 최대로 많이 돌 수 있는 경우의 수 구하기 풀이 접근 방식 1. 완전탐색을 위한 모든 경우의 수 구하기 → 던전의 개수가 3개인 경우: 012, 021, 102, 120, 201, 210 코드리뷰 import java.util.*; class Solution { HashSet set = new HashSet(); // 모든 경우의 수를 구하는 재귀함수 public void recursive(String comb, String remains, int maxLength) { if(!comb.isBlank() && comb.length() == maxLength) { set.add(comb); } for(int i = 0; i < remains.length(); i++) {.. 2024. 3. 22.