-- 코드를 입력하세요
# SELECT b.TITLE, b.BOARD_ID, r.REPLY_ID, r.WRITER_ID, r.CONTENTS, date_format(r.created_date, "%Y-%m-%d") as CREATED_DATE
# from used_goods_board as b, used_goods_reply as r
# where b.board_id = r.board_id and date_format(b.created_date, "%Y-%m")="2022-10"
# order by r.created_date, b.title;
select b.title, b.board_id, r.reply_id, r.writer_id, r.contents, date_format(r.created_date, "%Y-%m-%d") as created_date
from used_goods_board as b inner join used_goods_reply as r on b.board_id = r.board_id
where date_format(b.created_date, "%Y-%m")="2022-10"
order by r.created_date, b.title;
SELECT book_id, date_format(published_date, "%Y-%m-%d") from book where DATE_FORMAT(published_date, "%Y")="2021" and category="인문" order by published_date;
sql 공부하면서 처음 본 것이 많다. 공부 열심히 해봐야징
date_format을 이용해 날짜와 시간을 원하는 형식으로 출력할수도 있다는 것을 알았다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_BJ_14503_로봇청소기 {
static int n, m, ans;
static int[][] map;
// 상하좌우
static int[] dx = {-1, 1, 0, 0};
static int[] dy = {0, 0, -1, 1};
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
map = new int[n][m];
st = new StringTokenizer(br.readLine());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
for(int i=0; i<n; i++){
st = new StringTokenizer(br.readLine());
for(int j=0; j<m; j++){
map[i][j] = Integer.parseInt(st.nextToken());
}
}
simulation(r, c, d);
System.out.println(ans);
}//main
private static void simulation(int r, int c, int d){
int x = r;
int y = c;
int dir = d;
while(true){
boolean flag = false;
if(map[x][y] == 0) {
//현재 칸 청소
map[x][y] = 2;
ans++;
}
//주변 살펴보기
for(int i=0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
// 청소되지 않은 칸이 있는 경우
if(check(nx, ny) && map[nx][ny] == 0){
// 반시계 방향으로 회전
dir--;
if(dir < 0)
dir = 3;
flag = true;
break;
}
}//for
//주변 청소되지 않은 칸이 있을 때
if(flag){
// 앞쪽 칸이 청소되지 않았을 때
int[] next = front(x, y, dir);
if(check(next[0], next[1]) && map[next[0]][next[1]] == 0) {
//전진
x = next[0];
y = next[1];
}
}
// 주변 4칸 중 청소되지 않은 빈 칸이 없을 때
else {
int[] next = back(x, y, dir);
//한 칸 후진할 수 있으면
if(check(next[0], next[1])){
x = next[0];
y = next[1];
}
//없으면 탈출
else
break;
}
}//while
}//simulation
private static boolean check(int x, int y){
if(x<0 || y<0 || x>=n || y>=m || map[x][y] == 1)
return false;
return true;
}//check
private static int[] front(int x, int y, int dir){
switch (dir) {
case 0: {//북
int nx = x - 1;
return new int[]{nx, y, dir};
}
case 1: { //동
int ny = y + 1;
return new int[]{x, ny, dir};
}
case 2: {//남
int nx = x + 1;
return new int[]{nx, y, dir};
}
case 3: { //서
int ny = y - 1;
return new int[] {x, ny, dir};
}
}//switch
//아무것도 아닐 때
return new int[] {-1, -1, -1};
}//front
private static int[] back(int x, int y, int dir){
switch (dir) {
case 0: {//북
int nx = x + 1;
return new int[]{nx, y, dir};
}
case 1: { //동
int ny = y - 1;
return new int[]{x, ny, dir};
}
case 2: {//남
int nx = x - 1;
return new int[]{nx, y, dir};
}
case 3: { //서
int ny = y + 1;
return new int[] {x, ny, dir};
}
}//switch
//아무것도 아닐 때
return new int[] {-1, -1, -1};
}//back
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main_BJ_15903_카드합체놀이 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
PriorityQueue<Long> pq = new PriorityQueue<>();
st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++)
pq.offer(Long.parseLong(st.nextToken()));
int cnt = 0;
while(cnt < m){
long a = pq.poll();
long b = pq.poll();
pq.offer(a+b);
pq.offer(a+b);
cnt++;
}
long sum = 0;
int size = pq.size();
for(int i=0; i<size; i++)
sum += pq.poll();
System.out.println(sum);
}//main
}
해당 문제는 그리디로 푸는 문제로, priority queue를 사용하면 쉽게 풀 수 있다!
카드에서 작은 순서대로 정렬을 한 후, 앞에서 2개를 뽑아 더한 수를 다시 pq에 넣어두면, 다시 정렬이 된다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
System.out.println(st.countTokens());
}
}