분류 전체보기 98

87강 피자 배달 거리 (백준 15686_치킨 배달)

https://www.acmicpc.net/problem/15686 문제 N*N 크기의 도시지도가 있다. 각 격자칸에는 0은 빈칸, 1은 집, 2는 피자집으로 표현된다. 각 격자칸은 좌표(행번호, 열번호)로 표시된다. 도시에는 각 집마다 피자배달거리가 있는데, 각 집의 피자 배달 거리는 해당 집과 도시에 존재하는 피자집들과의 거리중 최솟값이다. 그런데 경기가 불황이라 도시에 있는 피자 집 중에서 M개만 남기고 나머지는 보조금을 주고 폐업시키려고한다. 이때 M개의 피자집을 고르는 기준은 도시의 피자 배달 거리가 최소가 되는 값이다. 도시의 피자 배달거리란 각 집들의 피자 배달 거리를 모두 합한 값이다. 입력첫번째 줄에 N과 M이 주어진다. 두번째줄 부터 도시 정보가 입력된다. 출력 첫째줄에 M개의 피..

85강,86강 섬나라 아일랜드(BFS,DFS)

문제 N*N 크기의 섬나라 아일랜드 지도가 격자판의 정보로 주어진다. 각 섬은 1로 표시되어 상하좌우,대각선으로 연결되어 있으며 0은 바다다. 섬나라 아일랜드에 몇개의 섬이 있는지 구하여라. 입력 설명첫 번째 줄에 자연수 N(3≤N≤20) 이 주어진다. 두번째줄 부터 격자판의 정보가 주어진다. 출력 설명첫번째 줄에 섬의 개수를 출력한다. 입력 예제 71 1 0 0 0 1 00 1 1 0 1 1 00 1 0 0 0 0 00 0 0 1 0 1 11 1 0 1 1 0 01 0 0 0 1 0 01 0 1 0 1 0 0 출력 예제 5 문제 풀이 static int[] dx = {-1,1, 0, 0, -1, -1, 1, 1};static int[] dy = {0, 0, -1, 1, -1, 1, -1, 1..

84강 토마토

문제 https://www.acmicpc.net/problem/7576 풀이과정 이 문제는 익은 토마토 옆에 있는 안익은 토마토가 하루가 지나면 익는다고 하였을때, 상자 안에 있는 모든 토마토가 익는데 걸리는 "최소 날짜" 를 구하는 문제이다. 익은 토마토를 기준으로 상하좌우로 파도처럼 퍼져나가며 주변 토마토의 상태를 바꾸면 되기 때문에 BFS로 문제를 푸는 것이 적당해 보인다. 그런데 이 문제에서 주의할 것은 이미 모두 익은 토마토가 주어진 경우에는 0, 토마토가 모두 익지는 않은 경우 -1을 출력해야한다는 것이다. 따라서 위의 두 경우에 유의하며 출력값이 나올 수 있도록 코드를 작성해보자. static int n,m; // 상자의 정보static int[] dx= new int[]{-1,1..

83강 미로의 최단 거리 통로

문제 7*7 격자판 미로를 탈출하는 최단경로의 길이를 출력하라. 경로의 길이는 출발점에서 도착점까지 가는데 이동한 횟수를 의미한다. 출발점은 격자의 (1,1)이고, 도착점은 (7,7)이다. 격자판의 1은 벽이고, 0은 통로이다. 격자판에서는 상하좌우로만 움직일 수 있다. 미로가 아래와 같다면 아래와 같은 경로를 통해 도착점에 도달하는 것이 최단경로이므로 정답은 12가 된다. 입력 첫번째 줄부터 7*7 격자의 정보가 주어진다. 출력 첫번째 줄에 경로의 길이를 출력한다. 도착할 수 없다면 -1을 출력한다. 입력예시0 0 0 0 0 0 00 1 1 1 1 1 00 0 0 1 0 0 01 1 0 1 0 1 11 1 0 1 0 0 01 0 0 0 1 0 01 0 1 0 0 0 0 출력 12 풀이과정 이전 ..

순열

문제10개 이하의 N개의 자연수가 주어지면, 그 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력하시오. 입력첫번째 줄에 결과를 출력합니다. 출력 순서는 사전순으로 오름차순으로 출력합니다. 입력 예시3 23 6 9 출력 예시 3 6 3 96 36 99 39 6 풀이과정 반복문과 DFS를 이용하여 순열을 구현할 수 있다. static int n,m;static int[] arr;static boolean [] visited;static int[] answer;첫번째 줄에 주어진 자연수들을 저장하기 위한 배열 arr을 선언한다. 중복으로 선택되는것을 막기 위해 boolean 배열을 이용하여 한번 선택되었다면 방문처리를 해준다. 선택된 수를 저장하기 위해 answer 배열을 사용하여 기록한다. m..

82강 미로탐색

package 섹션8_DFS_BFS심화;import java.io.*;import java.util.StringTokenizer;public class Q10_미로탐색 { static int[][] arr; // 미로 static boolean[][] visited; // 방문 배열 static int count; // 탈출 경로의 수 static int[] dx= new int[]{-1,1,0,0}; static int [] dy= new int[]{0,0,-1,1}; static void dfs(int x,int y){ if(x==7 && y==7){ // 도착지점 count++; return; } ..

메모이제이션

재귀함수 구현을 통해 메모이제이션을 이해해보기 피보나치 수열의 각 항을 출력하는 프로그램을 만들어보자 ✅ 1단계: 재귀함수로 피보나치 수열 구현해보기package 섹션7;import java.util.Scanner;public class Q1_재귀함수 { static int fibbo(int n){ if(n==1) return 1; else if (n==2) return 1; else return fibbo(n - 2) + fibbo(n - 1); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n= sc.nextInt();..

1-6 중복 문자 제거

package 섹션1_String;import java.io.*;public class 중복된_문자제거 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringBuilder sb= new StringBuilder(); boolean[] checkArr = new boolean[26]; String str= b..