본문 바로가기

recursive4

줄 서는 방법(Lv.2) 문제 설명 입출력 예시 요약 n명의 사람을 n!(factorial)만큼 가지수로 나열했을 경우 k번째 나열 순서 리턴 풀이 접근 방식 1. 각 인덱스의 숫자가 얼마의 반복 주기를 갖는지 확인 → n = 4의 경우 {1, 2, 3, 4} / {1, 2, 4, 3} / {1, 3, 2, 4} / {1, 3, 4, 2} / {1, 4, 2, 3} / {1, 4, 3, 2} / {2, 1, 3, 4} / ... → 첫 번째 숫자의 경우 6개, 두 번째 숫자의 경우 2개, 세 번째와 네 번째는 각각 1개의 반복 사이클을 갖는다. → n = 4의 경우 반복되는 사이클을을 배열로 나타내면 {(n-1)!, (n-2)!, (n-3)!, (n-4)!} 임을 확인 할 수 있다. 2. k를 통해 각 인덱스에 해당하는 숫자 구.. 2024. 4. 15.
타겟 넘버(Lv.2) 문제 설명 입출력 예시 요약 끝까지 더하거나 빼서 target을 완성할 수 있는 경우의 수 구하기 풀이 접근 방식 1. dfs를 통한 모든 경우의 수 구하기 → 재귀함수로 구현, length의 끝까지 도달했다면 return(exit) → 더하는 동작 실행 후 빼는 동작 실행 코드 리뷰 import java.util.*; class Solution { int[] nums; int targetNum; int count = 0; public void dfs(int i, int sum) { if(i == nums.length) {// 탈출조건은 length까지 도달했을 때가 된다. if(sum == targetNum) {// 마지막까지 더하거나 뺏을 때 target과 같은지 비교 count++; } return.. 2024. 3. 22.
소수 찾기(Lv.2) 문제 설명 입출력 예시 요약 주어진 숫자로 조합해서 만든 숫자가 소수인지 판별 풀이 문제 해석 각 숫자로 만들 수 있는 모든 숫자 만들어서 소수인지 판별 접근 방식 1. 모든 숫자 조합 구하기 → 순열에 가까운 조합방식으로 재귀함수를 통해 숫자 조합을 구한다. 2. 소수 판별 → 0과 1을 제외한 숫자 중, 2 ~ (해당 숫자-1)과 나눴을 때 나머지가 0이면 소수가 아님 → '에라토스테네스의 체'를 통해 해당 숫자의 제곱근까지만 반복문 실행 코드리뷰 import java.util.*; class Solution { HashSet set = new HashSet(); public boolean isPrime(int num) {// 소수인지 판별하는 메소드 boolean result = true; int .. 2024. 3. 21.
메뉴 리뉴얼(Lv.2) 문제 설명 입출력 예시 요약 각 order를 course에 해당하는 길이로 조합해서 개수가 가장 많은 조합을 return 풀이 문제 해석 각 order를 알파벳순으로 정렬해서 course에 해당하는 길이로 조합을 만들어 개수가 가장 많은 조합 구하기 접근 방식 1) 알바벳순으로 정렬 → .toCharArray()를 통해 String을 char[]로 변환 후 Arrays.sort(char[])를 통해 알파벳순으로 정렬 2) 재귀함수를 사용해 해당 order를 가지고 조합 구하기 → "AC"와 "CA"는 서로 같으므로 알파벳순으로 정렬 후 조합 구하기 3) 개수가 가장 많은 요소 구하기 → Collections.max(map.values())를 통해 max 구해서 비교 코드 리뷰 import java.uti.. 2024. 3. 19.