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', ...) 식으로도 활용이 가능하다.
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명 : AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성하는 문제였다.
평균 대여 기간은 소수점 두 번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬하고,
평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬한다.
이 글의 코드와 정보들은 [실전! 스프링 부트와 JPA 활용 1] 강의를 들으며 정리한 내용을 토대로 작성하였습니다..