목록level2 (7)
개발 무지렁이

더 맵게 🪅 매번 배열의 원소를 제거하고 넣고, 정렬해야하는 조건에서 우선순위 큐를 생각해 낼 수 있느냐 🪅 같은 동작을 반복해서 해야할 때 이를 메서드로써 만들 수 있느냐 🪅 항상 처음과 끝은 예외상황이 발생할 수 있는 것을 확인했느냐 💡 문제 접근 과정 음식 개수에 따라 scoville 최초 배열의 길이가 달라지고 한 번 스코빌 지수를 섞을 때마다, 배열의 길이가 1씩 줄어든다. 이 조건을 봤을 때 가변길이 배열(ArrayList)을 써야겠다는 생각이 들었다. 이 자료구조를 썼더니 매번 정렬해줘야돼서인지(?) 효율성테스트를 통과하지 못했다. (중간에 모든!! 음식의 스코빌 지수가 K이상이어야하는 조건을 놓쳐서 많이 헤맸다) 즉, 자료구조에 원소를 넣을 때마다 정렬을 해주는 자료구조가 무엇인지 생각해봤..

가장 큰 수 🪅 클래스를 정렬하는 방법을 알고 있느냐 => implements Comparable, compareTo(), Collections.sort() 🪅 클래스를 정렬할 때 두번째 정렬기준을 세울 수 있느냐 💡 문제 접근 과정 한자리 수든, 두자리 수든, 세자리 수든 첫째 자리 수가 큰 것이 중요하다. 첫째자리 수가 같을 때 둘째 자리 수가 중요하다. 즉, 하나의 숫자에서 빼올 수 있는 정보가 많고 이를 클래스를 이용해 정리해야겠다는 생각을 했다. 클래스를 이 기준에서 정렬하기 위해 Comparable 인터페이스와 compareTo 메서드를 이용해야 했고, 두번째 정렬기준까지 구현해야했다. 이 상태에서 Collections.sort()를 하면 위의 기준에 따라 클래스가 정렬된다. 나는 입력이 두자..

전화번호 목록 🪅 String의 내장 메서드 startsWith()를 알고 있느냐 🪅 String배열을 Arrays.sort()했을때 어떤 식으로 정렬되는지 알고 있느냐 => 첫번째 문자를 기준으로 정렬된다 🪅 for문을 한번만 쓰고도 문제를 해결할 수 있느냐(효율성 테스트) 💡 문제 접근 과정 phone_book배열 중에 어떤 원소가 prefix가 될지는 입출력 예마다 다르다. 때문에 prefix가 될 원소를 for문을 통해 하나씩 대입해보고 isContain 메서드에서 prefix를 제외한 나머지 원소들과 접두사를 비교해봄으로써(startsWith()) for문을 두번 돌렸더니 효율성 테스트를 통과하지 못했다. 결국 for문을 한 번 돌리면서 문제를 해결해야했는데 이를 위해 문자열 정렬이 필요했다. ..

기능개발 🪅 넣은 순서대로 빼는 것을 보고 큐를 생각할 수 있느냐 => List를 이용하기 전에 스택/큐를 생각해본다 🪅 클래스를 새로 만들어 복잡한 자료를 잘 정리할 수 있느냐 🪅 큐를 Integer[]로, Integer[]를 int[]로 변환할 수 있느냐 💡 문제 접근 과정 'progresses'의 원소와 'speeds'의 원소를 이용해서 배포하기까지의 남은 일수를 계산해야했다. 일단 이 원소들을 필드에 저장해두고 관련 메서드를 만들어 이를 이용하면 되겠다는 생각에 Work라는 클래스를 만들었다. 처음엔, 그렇게 만든 work 객체에서 calculateDays 메서드를 통해 얻은 restDays를 아무생각없이 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..