diff --git a/20210818/BOJ13567.java b/20210818/BOJ13567.java new file mode 100644 index 0000000..dba19c1 --- /dev/null +++ b/20210818/BOJ13567.java @@ -0,0 +1,61 @@ +package day1.robot; +// https://www.acmicpc.net/problem/13567 + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class BOJ13567 { + static int M, N; + static int dx[] = { 1, 0, -1, 0 }; // 동남서북 + static int dy[] = { 0, -1, 0, 1 }; + + + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + M = Integer.parseInt(st.nextToken()); + N = Integer.parseInt(st.nextToken()); + + String action; + int num; + int x=0; int y=0; + int dir =0; + + for(int i=0; i< N; i++) { + StringTokenizer st2 = new StringTokenizer(br.readLine()); + + action = st2.nextToken(); + num = Integer.parseInt(st2.nextToken()); + + + if(action.equals("MOVE")) { + x += dx[dir]*num; + y += dy[dir]*num; + if(ifOut(x,y,M)){ + System.out.println(-1); + return; + } + } + else if(action.equals("TURN")) { + if(num==0){ + dir = (dir + 4-1)%4; + } + else{ + dir = (dir+1)%4; + } + } + + + } + + System.out.println(x+" "+y); + + } + + public static boolean ifOut(int x, int y, int m) { + return x>=m || y>=m || x<0 || y<0; + } +} diff --git a/20210818/BOJ14467.java b/20210818/BOJ14467.java new file mode 100644 index 0000000..20a9d31 --- /dev/null +++ b/20210818/BOJ14467.java @@ -0,0 +1,29 @@ +package day1; +// https://www.acmicpc.net/problem/14467 +import java.util.Arrays; +import java.util.Scanner; + +public class BOJ14467 { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int ansewer =0; + int all = sc.nextInt(); + int[] cow = new int[11]; + Arrays.fill(cow,-1); + int key; int cross; + + for(int i=0;i answer = new ArrayList<>(); + String[] line; + + for(int i=0;i0){ + cnt--; + for(int i=0;i"+" is acceptable."); + else + System.out.println("<"+tmp+">"+" is not acceptable."); + + + } + } + static boolean total(String tmp){ + if(rule_vowel(tmp)){ + if(rule_chain(tmp)){ + if(rule_same(tmp)) + return true; + } + } + return false; + } + + static boolean rule_vowel_ch(char ch) { + if(ch=='a'|| ch=='e' || ch=='i' || ch=='o' || ch=='u') + return true; + return false; + } + + + static boolean rule_vowel(String tmp) { + + for(int i=0;i1){ + for(int i=0; iday) { + max = day; + maxNA = exNa; + } + } + + System.out.println(minNA); + System.out.println(maxNA); + + } +} diff --git a/20210818/BOJ7785.java b/20210818/BOJ7785.java new file mode 100644 index 0000000..4ad2209 --- /dev/null +++ b/20210818/BOJ7785.java @@ -0,0 +1,38 @@ +package bjon7785; +// https://www.acmicpc.net/problem/7785 +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + + +public class BOJ7785 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int num = Integer.parseInt(br.readLine()); + StringTokenizer st; + ArrayList answer = new ArrayList<>(); + + Map map = new HashMap<>(); + + + + for(int i=0; i[] graph; + static boolean[] visit; + static Queue queue; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + num = Integer.parseInt(br.readLine()); // 총 인구 받기 + st = new StringTokenizer(br.readLine()); //2번째 입력값 나누기 + start = Integer.parseInt(st.nextToken()); // 첫째 사람 + end = Integer.parseInt(st.nextToken()); // 둘째 사람 + int M = Integer.parseInt(br.readLine()); // 총 촌수 관계 숫자 받기 + + + graph = new ArrayList[num+1]; // 사람 리스트 만들기 -> 0을 제외하기 위해 (num+1) + for(int i=1;i<=num;i++){ // i=1 -> 0인 사람이 없기 때문에 + graph[i]=new ArrayList<>(); // 사람 별 리스트 생성 + } + + + for(int i=0;i(); // 연결된 노드 + + visit[start] = true; + queue.offer(start); + + while (!queue.isEmpty()) { + int queueSize = queue.size(); + for(int i=0;i[] graph; + static boolean[] visit; + static Queue queue; + static int[] dist; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); // 헛간 개수 + M = Integer.parseInt(st.nextToken()); // 연결 개수 + + graph = new ArrayList[N + 1]; + for (int i = 1; i <= N; i++) { + graph[i] = new ArrayList<>(); + } + + int a_i, b_i = 0; + + for (int i = 0; i < M; i++) { // 헛간간의 관계 리스트 생성 + st = new StringTokenizer(br.readLine()); + a_i = Integer.parseInt(st.nextToken()); + b_i = Integer.parseInt(st.nextToken()); + graph[a_i].add(b_i); + graph[b_i].add(a_i); + } + + Bfs(1); + + } + + private static void Bfs(int start) { + + visit = new boolean[N + 1]; // 방문 여부 배열 + queue = new LinkedList(); // BFS 를 위한 큐 + dist = new int[N+1]; // 0에서 해당 헛간간의 거리 배열 + + // 초기화 + visit[start] = true; + queue.offer(start); + Arrays.fill(dist, 0); + + //BFs 탐색 + while (!queue.isEmpty()) { + + int now = queue.poll(); + + for (int next : graph[now]) { + if (!visit[next]) { + queue.offer(next); + visit[next] = true; + dist[next] = dist[now] +1; + } + } + } + + int maxPlace = Integer.MIN_VALUE; //숨은 헛간 번호 + int maxDist = Integer.MIN_VALUE; // 숨은 헛간 거리 + int maxNum = 1; // 숨은 헛간과 같은 거리를 갖는 헛간의 개수 + + // ditst[] 배열 탐색 + for (int i = 1; i <= N; i++) { + if (maxDist < dist[i]) { + maxDist = dist[i]; + maxPlace = i; + maxNum = 1; + } else if (maxDist == dist[i]) { + maxNum++; + } + } + System.out.println(maxPlace + " " + maxDist + " " + maxNum); + + } +} diff --git a/20210902/READ.MD b/20210902/READ.MD new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/20210902/READ.MD @@ -0,0 +1 @@ + diff --git a/20210909/BOJ19940.java b/20210909/BOJ19940.java new file mode 100644 index 0000000..4d84aea --- /dev/null +++ b/20210909/BOJ19940.java @@ -0,0 +1,61 @@ +import java.io.*; + +public class BOJ19940 { + + static int N,M; + static int sixty, ten, one; + static int[] answer; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + N = Integer.parseInt(br.readLine()); // 반복 횟수 + + + + for (int i = 0; i < N; i++) { + M = Integer.parseInt(br.readLine()); // 입력값 + answer = new int[5]; // 정답 배열 => +60 , +10, -10, +1, -1 + + sixty = M / 60; + ten = (M % 60) / 10; + one = M % 10; + + if(one >5){ + ten += 1; + one -= 10; + } + + if (ten > 3) { + sixty += 1; + ten -= 6; + } + if (one == 5 && ten<0) { // 45, 55의 예외적인 경우 + ten += 1; + one -= 10; + } + + + answer[0] = sixty; + if(ten>0) answer[1] = ten; + if(ten<0) answer[2] = Math.abs(ten); + if(one>0) answer[3] = one; + if(one<0) answer[4] = Math.abs(one); + + for(int j = 0 ; j < 5 ; j++) bw.write(answer[j] + " "); + bw.write("\n"); + bw.flush(); + + + } + + + + + + + + + } +} diff --git a/20210916/BOJ2468.java b/20210916/BOJ2468.java new file mode 100644 index 0000000..d7fe6d1 --- /dev/null +++ b/20210916/BOJ2468.java @@ -0,0 +1,76 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +//https://www.acmicpc.net/problem/2468 +// 18476KB 252ms +public class BOJ2468 { + + static int[][] map; + static int N; + static boolean[][] visit; + static int[] dx = {0, 0, -1, 1}; + static int[] dy = {-1, 1, 0, 0}; + + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = null; + + N = Integer.parseInt(br.readLine()); // 행,열의 수 + int max = 0; + map = new int[N+1][N+1]; + + for (int i = 0; i < N; i++) { // 입력값을 통해 각 영역 높이를 배열로 표현 + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < N; j++) { + map[i][j] = Integer.parseInt(st.nextToken()); + max = Math.max(max, map[i][j]); // 가장 높은 영역의 높이 |편리하다 + } + } + + + + int ans = 0; + + + + for (int sea = 1; sea <= max; sea++) { // 1부터 가장 높은 높이 까지 물이 차오르는 조건 설정 + visit = new boolean[N + 1][N + 1]; // 방문처리를 위한 배열 + int cnt = 0; + for (int x = 0; x < N; x++) { + for (int y =0; y < N; y++) { + if(map[x][y]>sea && !visit[x][y]){ // 방문을 하지 않았거나 해수면보다 높은 영역 탐색 + cnt++; // 해당 해수면 높이에 따른 영역 개수 => 재귀함수를 돌면서 상하좌우로 연결된 노드들은 하나로 카운트 + dfs(sea,x,y); // 해수면 높이, map 좌표 + } + } + } + //System.out.println(cnt); + ans = Math.max(ans, cnt); // 여러 해수면 높이중 가장 높은 영역 횟수 구하기 + } + + System.out.println(ans==0 ? 1:ans); // 아무 지역도 물에 잠기지 않을수 있다가 밑에 조그만하게 적혀있었음 / 람다식 한번 써봄 + } + static void dfs(int sea, int x, int y) { + visit[x][y] =true; // 방문처리 + + for (int i = 0; i < 4; i++) { + int nx = x + dx[i]; // 좌우 + int ny = y + dy[i]; // 상하 + + //기준 좌표에서 상하좌우에 있는 노드 탐색 + if (nx >= 0 && ny >= 0 && nx < N && ny < N) { // 좌표 평면을 벗어나지 않는 노드 + if(!visit[nx][ny] && map[nx][ny]>sea){ // 방문한적 없고 해수면 높이보다 높은 노드 + dfs(sea,nx,ny); // 재귀 호출 => 위의 조건을 만족하는 상하좌우의 노드들을 계속해서 탐색 + } + + } + } + + } + + +} + diff --git a/20210916/READ.MD b/20210916/READ.MD new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/20210916/READ.MD @@ -0,0 +1 @@ +