목록프로그래머스 (19)
개발 무지렁이
기능개발 🪅 넣은 순서대로 빼는 것을 보고 큐를 생각할 수 있느냐 => List를 이용하기 전에 스택/큐를 생각해본다 🪅 클래스를 새로 만들어 복잡한 자료를 잘 정리할 수 있느냐 🪅 큐를 Integer[]로, Integer[]를 int[]로 변환할 수 있느냐 💡 문제 접근 과정 'progresses'의 원소와 'speeds'의 원소를 이용해서 배포하기까지의 남은 일수를 계산해야했다. 일단 이 원소들을 필드에 저장해두고 관련 메서드를 만들어 이를 이용하면 되겠다는 생각에 Work라는 클래스를 만들었다. 처음엔, 그렇게 만든 work 객체에서 calculateDays 메서드를 통해 얻은 restDays를 아무생각없이 List에 넣었다. 그리고 List를 순회하며, 현재값과 그 다..
같은 숫자는 싫어 🪅 중복을 제거하는 방법으로 스택을 생각해낼 수 있느냐 🪅 스택을 Integer[]로, Integer[]을 int[]로 변환할 수 있느냐 💡 문제 접근 과정 단순히 중복을 제거하는 문제인 줄 알았다. 때문에 HashSet 자료구조가 생각났고, 그중에서도 넣은 순서를 보장하는 LinkedHashSet을 떠올렸다. 하지만, 자세히보니 이 문제는 단순히 중복을 제거하는 문제가 아닌 이웃한 수의 중복을 제거하는 문제였다. 바로 LinkedHashSet을 버리고, 다른 방식으로 생각해보기로 했다. 순서를 보장하는 List를 이용하면 되겠다 싶어, 배열의 원소들을 List에 넣은 뒤 현재원소와 다음원소를 비교해, 같으면 다음 원소를 지워주는 방식으로 코드를 작성했다 하지만 list에 원소를 넣었다..
타겟넘버 🪅 모든 조합을 일일이 해야할 때(완전탐색), DFS로 구현할 수 있느냐 🪅 재귀함수를 사용할 때, 종료조건을 명시했느냐 class Solution { int result = 0; public void DFS(int[] numbers, int target, int index, int sum) { if(index == numbers.length) { if(sum == target) { result++; } return; } DFS(numbers, target, index+1, sum+numbers[index]); DFS(numbers, target, index+1, sum-numbers[index]); } public int solution(int[] numbers, int target) { in..
카펫 🪅 약수를 구하는 알고리즘을 짤 수 있느냐 🪅 예시를 보고 출력과 입력사이의 규칙을 찾을 수 있느냐 이 문제의 answer는 카펫의 가로격자수와 세로격자수를 배열로 출력하는 것이다. 즉, 가로격자수 x 세로격자수 = (카펫 전체 격자수) '카펫 전체 격자수'는 갈색 격자수와 노란색 격자수를 합한 값이 되고 '카펫 전체 격자수'의 약수 중에서 가로격자수가 세로격자수보다 큰 약수들의 쌍을 구한다.(문제 전제) 그림을 보면 갈색격자는 모든테두리에 한줄씩 들어감으로 (가로격자수-2) * (세로격자수-2) = '노란색 격자수'가 된다. 위에서 구한 쌍 중에서 위의 조건을 만족하는 하나의 쌍을 답으로 출력한다. import java.util.*; class Solut..
모의고사 🪅 keyPoint: List -> Integer[]로 변환할 수 있느냐 🪅 keyPoint: Integer[] -> int[]로 변환할 수 있느냐 ⚠️ List를 Integer배열로 변환: Integer[] arrWrapper = list.toArray(new Integer[0]); ⚠️ Integer배열을 int배열로 변환: int[] arr = Arrays.stream(arrWrapper).mapToInt(Integer::intValue).toArray(); import java.util.*; class Solution { public int[] solution(int[] answers) { int[] answer = {}; int[] firstPattern = {1, 2, 3, 4, 5}..
모음사전 🪅 keyPoint: 중복순열을 dfs로 구현할 수 있느냐 => 방문배열을 없애주면 된다. ⚠️ 배열 선언 및 초기화, String[] vowels = {"A", "E", "I", "O", "U"}; import java.util.*; class Solution { int answer = 0; String[] vowels = {"A", "E", "I", "O", "U"}; String[] wordBits; boolean go = true; public void dfs(int depth, String[] output) { if(depth == 5) return; for(int i = 0; i < 5; i++) { if(depth < wordBits.length) { output[depth] = v..