본문 바로가기

반응형

컴퓨터/백준

(20)
java - 백준 알고리즘 - 2606 바이러스 알고리즘 분류에는 플로이드 와샬 알고리즘이라고 분류 되어있지만 dfs를 이용해서 풀었다. 자세한 설명은 코드에 주석을 보면 좋을 것 같다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int N, M, result; static boolean[][] conn;// 컴퓨터 간의 연결을 나타내기 위한 배열 static boolean[] visited;// 방문을 체크하기 위한 배열 public static void main(String[] agrs) throws IOExceptio..
java - 백준 알고리즘 - 2493 탑 이 문제는 자료구조 Stack을 이용하는 문제이다. 왼쪽부터 차례대로 Stack에 하나씩 넣으면서 스텍의 Top 값과 비교해주면 된다. 인덱스를 출력하기 위해서 높이와 인덱스 2개의 stack을 사용하였다. 스텍에 넣을 값 = now, 스텍의 top 값 = top 1. top > now 일때 Top의 index를 버퍼에 담고 now를 hight, index 스텍에 push 해준다. 2. now = i; ++i) { arr[i] = Integer.parseInt(st.nextToken()); } hight.push(arr[1]); index.push(1); bw.write(""+0); for (int i = 2; N >= i; ++i) { while (true) { if (!hight.isEmpty()) ..
JAVA - 백준 알고리즘 - 1520 내리막길 이 문제는 dp를 사용하여 풀 수 있는 문제이다. dp를 사용하는데 완전히 익숙해지지 않았는지 계속 시간초과가 났다. 2시간정도 시도 해보다가 결국 다른 블로그에서 코드를 참고하여 테스트케이스를 디버깅해보고 문제를 해결했다. (왼쪽 오른쪽 위쪽 아래쪽)으로 움직여야 할때 nx와 ny를 사용해 간단하게 표현하는 테크닉에 익숙해지도록 자주 사용해봐야 겠다. 자세한 설명은 주석을 참고하면 좋을 것 같다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class P1520 { static int[][] map; stati..
JAVA - 백준 알고리즘 - 14852 타일 채우기 3 이 문제는 DP를 사용해서 풀 수 있다. N의 수가 크기때문에 1차원 dp를 사용한다면 시간초과가 된다. 그러므로 2차원 배열을 이용하여 dp를 해주면 된다. 또한 값을 저장하는 배열의 값이 21억이 넘는 경우가 발생하여 int 형으로 선언한다면 런타임에러가 뜨는 것만 조심해야한다. 이해가 잘 되지 않으면 아래 추천 영상을 보면서 이해하길 바란다. import java.util.Scanner; public class Main { private static final int MOD = 1000000007; static long[][] arr; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nex..
JAVA - 백준 알고리즘 - 2718 타일 채우기 https://www.acmicpc.net/problem/2718 이 문제는 DP를 사용하여 풀 수 있다. 코드는 다음과 같다. 자세한 설명이 필요하다면 아래 추천영상을 참고하길 바란다. import java.util.Scanner; public class Main { static int[] arr = new int[1001]; static int[] N; static int result, a; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N1 = sc.nextInt(); N = new int[N1+1]; for(int i = 0; N1>i ; ++i) { N[i] = sc.nextInt(); } for..
JAVA - 백준 알고리즘 - 2133 타일 채우기 https://www.acmicpc.net/problem/2133 이 문제는 DP (동적 계획법) 알고리즘을 사용하면 풀 수 있는 문제이다. 자세한 설명은 주석을 참고하면 된다. dp를 풀때는 아무것도 하지 않는 경우도 경우의 수 1로 본다는 것을 알아두어야겠다. import java.util.Scanner; public class Main { static int[] arr = new int[31]; // dp 값 저장을 위한 배열 static int result; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); // 입력 System.out.print(dp(N)); // 출..
JAVA - 백준 알고리즘 - 1700 멀티탭 스케줄링 이 문제는 그리디 알고리즘을 이용해 푸는 문제이다. 처음 생각하기로는 앞으로 꽂아야 할 용품의 수가 많으면 오래 남아 있도록 해야 정답이 나올 것이라 생각했다. 하지만 그렇게 풀이를 작성했더니 몇몇 테스트 케이스를 통과하지 못했다. 다시 생각한 결과 멀티탭에 꽂혀 있는 용품들 중 가장 나중에 사용될 것을 먼저 뽑도록 바꾸었다. 너무 오랫동안 문제를 풀고 추가하다보니 코드가 많이 복잡해졌다. 최적화를 하면 코드를 많이 줄일수 있을 거 같지만 지금 당장은 이 코드를 수정하고 싶은 생각이 들지 않는다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringT..
JAVA - 백준 알고리즘 - 1080 행렬 이 문제는 그리디 알고리즘으로 쉽게 풀 수 있는 문제이다. 두 개의 배열에 입력을 받고 0,0부터 차례대로 두 배열의 원소가 같은지 비교해주면 된다. 만약 배열의 원소가 같지 않다면 3x3에 해당되는 원소를 true에서 false로 , false에서 true로 바꿔주고 count를 1 증가시켜주면 된다. 배열의 인덱스 범위에 대해서 조금만 신경을 쓴다면 쉽게 맞을 수 있는 문제인 것 같다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int N, M, count, temp; s..

반응형