728x90
반응형
728x90
반응형

문제는 다음과 같습니다.

https://www.acmicpc.net/problem/1915


 
import java.util.Scanner;

public class Test1915{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		String[] num = new String[1001];
		int dp[][] = new int[1001][1001];
		int map[][] = new int[1001][1001];
		for(int i=1; i<=n; i++) {
			num[i] = sc.next();
			for(int j=1; j<=m; j++) {
				map[i][j] = num[i].charAt(j-1)-'0';
			}
		}
		int answer=0;
		for(int i=1; i<=n; i++){
			for(int j=1; j<=m; j++){
				if(map[i][j] != 0){
					int imsi = Math.min(dp[i-1][j], dp[i-1][j-1]);
					dp[i][j] = Math.min(dp[i][j-1], imsi) + 1;
					answer = Math.max(answer, dp[i][j]);
				}
			}
		}
		System.out.println(answer*answer);
	}
	
}






결과입니다.


728x90
반응형
728x90
반응형

문제는 다음과 같습니다.

https://www.acmicpc.net/problem/11724

 
import java.util.Scanner;

public class Test11724{
	static int N,M;
	static int visit[];
	static int graph[][];
	
	static void DFS(int x, int cnt) {
		visit[x]=cnt;
		for(int i=1; i<N+1; i++) {
			if(graph[x][i]==1 && visit[i]==0) {
				DFS(i,cnt);
			}
		}
	}
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		M = sc.nextInt();
		graph = new int[N+1][N+1];
		visit = new int[N+1];
		
		for(int i=0; i<M; i++) {
			int x = sc.nextInt();
			int y = sc.nextInt();
			graph[x][y]=graph[y][x]=1;
		}
		int cnt=1;
		for(int i=1; i<=N; i++) {
			if(visit[i]==0) {
				DFS(i, cnt);
				cnt++;
			}
		}
		System.out.println(cnt-1);
	}
	
	
}

 




결과는 다음과 같습니다.


728x90
반응형
728x90
반응형

1. 깊이 우선 탐색(depth-first searchDFS)은 맹목적 탐색방법의 하나로 탐색트리의 최근에 첨가된 노드를 선택하고, 이 노드에 적용 가능한 동작자 중 하나를 적용하여 트리에 다음 수준(level)의 한 개의 자식노드를 첨가하며, 첨가된 자식 노드가 목표노드일 때까지 앞의 자식 노드의 첨가 과정을 반복해 가는 방식이다.

장점과 단점[편집]

  • 장점
    • 단지 현 경로상의 노드들만을 기억하면 되므로 저장공간의 수요가 비교적 적다.
    • 목표노드가 깊은 단계에 있을 경우 해를 빨리 구할 수 있다.
  • 단점
    • 해가 없는 경로에 깊이 빠질 가능성이 있다. 따라서 실제의 경우 미리 지정한 임의의 깊이까지만 탐색하고 목표노드를 발견하지 못하면 다음의 경로를 따라 탐색하는 방법이 유용할 수 있다.
    • 얻어진 해가 최단 경로가 된다는 보장이 없다. 이는 목표에 이르는 경로가 다수인 문제에 대해 깊이우선 탐색은 해에 다다르면 탐색을 끝내버리므로, 이때 얻어진 해는 최적이 아닐 수 있다는 의미이다.


2. 너비 우선 탐색(Breadth-first search, BFS)은 맹목적 탐색방법의 하나로 시작 정점을 방문한 후 시작 정점에 인접한 모든 정점들을 우선 방문하는 방법이다. 더 이상 방문하지 않은 정점이 없을 때까지 방문하지 않은 모든 정점들에 대해서도 넓이 우선 검색을 적용한다. OPEN List 는 를 사용해야만 레벨 순서대로 접근이 가능하다.

장점과 단점[편집]

장점
  • 출발노드에서 목표노드까지의 최단 길이 경로를 보장한다.
단점
  • 경로가 매우 길 경우에는 탐색 가지가 급격히 증가함에 따라 보다 많은 기억 공간을 필요로 하게 된다.
  • 해가 존재하지 않는다면 유한 그래프(finite graph)의 경우에는 모든 그래프를 탐색한 후에 실패로 끝난다.
  • 무한 그래프(infinite graph)의 경우에는 결코 해를 찾지도 못하고, 끝내지도 못한다.


문제는 다음과 같습니다.

https://www.acmicpc.net/problem/1260

 
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Test1260{
	static int N,M,V;
	static int visit[], graph[][];

  static void DFS(int x) {
		visit[x]=1;
		System.out.print(x+" ");
		for(int i=1; i<=N; i++) {
			if(graph[x][i]==1 && visit[i]==0) {
				DFS(i);
			}
		}
	}
	static void BFS() {
		Queue<Integer> q = new LinkedList<Integer>();
		visit[V] = 1;
		q.add(V);
		while(!q.isEmpty()) {
			int x = q.peek(); //Queue에서 제거하며 읽기
			q.poll(); //Queue에서 제거하지 않고 읽기
			System.out.print(x+" ");
			for(int i=1; i<=N; i++) {
				if(graph[x][i]==1 && visit[i]==0) {
					visit[i]=1;
					q.add(i);
				}
			}
		}
	}

	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		M = sc.nextInt();
		V = sc.nextInt();
		
		graph = new int[N+1][N+1];
		for(int i=1; i<=M; i++) {
			int x = sc.nextInt();
			int y = sc.nextInt();
			graph[x][y]=graph[y][x]=1;
		}

		visit = new int[N+1];
		DFS(V);
		System.out.println();
		visit = new int[N+1];
		BFS();
		
	}
	
}
 




결과는 다음과 같습니다.


728x90
반응형
728x90
반응형

문제는 다음과같습니다.

https://www.acmicpc.net/problem/2566


 
import java.util.Scanner;

public class Test2566{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int dp[][] = new int[10][10];
		int mi=0,mj=0;
		for(int i=0; i<9; i++) {
			for(int j=0; j<9; j++) {
				dp[i][j]=sc.nextInt();
				if(dp[mi][mj]<dp[i][j]) {
					mi=i; mj=j;
				}
			}
		}
		System.out.println(dp[mi][mj]);
		System.out.println(mi+1+" "+(mj+1));
	}
}
 







결과는 다음과 같습니다.



728x90
반응형
728x90
반응형

문제는 다음과 같습니다.

https://www.acmicpc.net/problem/11052


 
import java.util.Scanner;

public class Test11052{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int arr[] = new int[n+1];
		for(int i=1; i<=n; i++) {
			arr[i] = sc.nextInt();
		}
		int dp[] = new int[n+1];
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=i; j++) {
				dp[i] = Math.max(dp[i], dp[i-j]+arr[j]);
			}
		}
		System.out.println(dp[n]);
		sc.close();
	}
}
 






결과는 다음과 같습니다.


728x90
반응형
728x90
반응형

문제는 다음과 같습니다.

https://www.acmicpc.net/problem/2579


 
import java.util.Scanner;

public class Test{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int arr[] = new int[n]; 
		for(int i=0; i<n; i++) {
			arr[i] = sc.nextInt();
		}
		int dp[] = new int[n];
		dp[0] = arr[0];
		dp[1] = Math.max(arr[0],0) + arr[1];
		dp[2] = Math.max(arr[0], arr[1])+ arr[2];
		for(int i=3; i<n; i++) {
			dp[i] = Math.max(dp[i-3]+arr[i-1], dp[i-2]) + arr[i];
		}
		System.out.println(dp[n-1]);
		sc.close();
	}
}
 








결과는 다음과 같습니다.


728x90
반응형
728x90
반응형

문제는 다음과 같습니다.

https://www.acmicpc.net/problem/1924



 
import java.util.Scanner;

public class Test1924{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int x=sc.nextInt();
		int y=sc.nextInt();
		int day=0;
		for(int i=1; i<x; i++){
			if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12){
				day+=31;
			}
			if(i==2){
				day+=28;
			}
			if(i==4 || i==6 || i==9 || i==11){
				day+=30;
			}
		}
		
		day+=y;
		int week= day%7;
		switch(week){
			case 0:
				System.out.println("SUN");
				break;
			case 1:
				System.out.println("MON");
				break;
			case 2:
				System.out.println("TUE");
				break;
			case 3:
				System.out.println("WED");
				break;
			case 4:
				System.out.println("THU");
				break;
			case 5:
				System.out.println("FRI");
				break;
			case 6:
				System.out.println("SAT");
				break;
		}
	}
}
 






결과는 다음과 같습니다.


728x90
반응형
728x90
반응형

문제는 다음과 같습니다.

https://www.acmicpc.net/problem/14501


 
import java.util.Scanner;

public class Test14501 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] t = new int[16]; //상담을 처리해야하는 기간
		int[] p = new int[16]; //상담 완료 후 받을 수 있는 금액
		int[] dp = new int[16]; //얻을 수 있는 최대 수익

		for(int i=1; i<=n; i++){
			t[i] = sc.nextInt(); 
			p[i] = dp[i] = sc.nextInt(); 
		}

		for(int i=2; i<=n; i++){
			for(int j=1; j<i; j++){
				if(t[j]<=i-j){
					dp[i] = Math.max(p[i]+dp[j], dp[i]);
				}
			}
		}

		int max=0;
		for(int i=1; i<=n; i++){
			if(t[i]+i<=n+1){
				if(max<dp[i]){
					max = dp[i];
				}
			}
		}
		System.out.println(max);
		sc.close();
	}
	
}
 





결과는 다음과 같습니다.


728x90
반응형
728x90
반응형

+ Recent posts