import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Collections;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
Map<Integer, Integer> map = new HashMap<>();
// 크기별로 몇 개 있는지 map에 저장함
for (int tan : tangerine) {
map.put(tan, map.getOrDefault(tan, 0)+1);
}
// 개수(value)가 많은 순으로 정렬
List<Integer> list = new ArrayList<>(map.values());
Collections.sort(list, Collections.reverseOrder());
// 개수가 많은 순부터 사용
for (Integer a : list) {
if(k < 1)
return answer;
k -= a;
answer++;
}
return answer;
}
}
귤의 크기(key)와 개수(value)를 Map에 저정한 다음, 개수가 많은 순부터 사용하여 k개를 채우면 되는 문제였다.
HashMap()의 getOrDefault(key, defaultValue)
는 지정된 key의 값(객체)을 반환한다. key가 없으면 지정된 defaultValue로 지정된 객체를 반환한다.
class Solution {
public int solution(int n) {
int answer = 0;
for(int i = 1; i <= n; i++) {
int sum = 0;
for(int j = i; j <= n; j++) {
sum += j;
if(sum == n) {
answer++;
break;
} else if(sum > n) {
break;
}
}
}
return answer;
}
}
연속한 자연수들로 표현 하는 방법
을 어떻게 풀이할지 생각하다가 이중 for문으로 구현했다.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] dir = {
{-1, 0}, {1, 0}, {0, -1}, {0, 1}
};
static int[][] map;
static int[][] dp;
static int N, ans;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
N = stoi(br.readLine());
ans = 0;
map = new int[N][N];
dp = new int[N][N];
// 맵 정보 입력
for(int r = 0 ; r < N ; ++r) {
st = new StringTokenizer(br.readLine());
for(int c = 0 ; c < N ; ++c) {
map[r][c] = stoi(st.nextToken());
}
}
// DP 테이블 갱신과 동시에 최댓값 갱신
// DP 테이블은 해당 지역에서 이동할 수 있는 최댓값이다.
for(int r = 0 ; r < N ; ++r) {
for(int c = 0 ; c < N ; ++c) {
int way = dfs(r, c);
ans = way > ans ? way : ans;
}
}
System.out.println(ans);
}
private static int dfs(int r, int c) {
// 이미 갱신된 지역은 바로 그 값을 리턴한다.
if(dp[r][c] != 0) return dp[r][c];
// 1로 초기화
dp[r][c] = 1;
// 해당 지점 기준 4방 탐색
for(int d = 0 ; d < 4 ; ++d) {
int nr = r + dir[d][0];
int nc = c + dir[d][1];
if(nr >= N || nr < 0 || nc >= N || nc < 0) continue;
// 다음 지역은 이전 지역보다 커야한다.
if(map[nr][nc] > map[r][c]) {
// 기존의 값과 새로 탐색한 값 중에 최댓값으로 갱신
dp[r][c] = Math.max(dp[r][c], dfs(nr, nc) + 1);
}
}
return dp[r][c];
}
private static int stoi(String s) {
return Integer.parseInt(s);
}
}
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE name in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID;
동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty
인 동물의 이름이 포함된 것을 조회하는 경우,
SQL의 IN을 사용해서 특정 이름값만 조회하도록 한다.
WHERE 컬럼명 IN('값1', '값2', ...)
이런 식으로 활용한다.
해당 문제에서 해당하지 않지만, 특정 값이 아닌 경우에는 NOT IN('값1', '값2', ...)
식으로도 활용이 가능하다.