목록Algorithm (36)
뮁이의 개발새발
오랜만에 알고리즘 하니까 머리가 안굴러가네욤.... 소수판별을 맨 처음부터 세팅해놓고 진행하기 ㄴ 비슷한 문제로 에라토스테네스의 체 ? 가 있음 시간초과 자꾸나서 소수판별 로직을 바꾸었음 자세한 내용은 주석 참고 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class bj6588 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); boolean..
그리디 알고리즘 : 현재 상황에서 지금 당장 좋은 것만 고르는 방법 => 지금 상황에서 가장 좋아보이는 것만 선택해도 문제를 풀 수 있는지를 파악해야 함 예제 1) 거스름돈 문제 가장 큰 화폐 단위부터 돈을 거슬러 주는 것 => 가지고 있는 동전 중에서 큰 단위가 항상 작은 단위의 배수이므로 가능함. 그러나 400원과 같은 단위가 생긴다면? 800원을 거스름돈 주는 경우, 그리디의 경우 500,100*3 = 4개가 되지만, 최적의 해는 400*2 이므로 그리디를 적용할 수 없음. => 다이나믹 알고리즘 활용해야 함 => 문제풀이를 위한 최소한의 아이디어가 정당한 지 검토할 수 있어야 함 예제 2) 1이 될 때 까지 어떠한 수 N이 1이 될때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한..
map을 잘 사용하지 않아서 list로 했다가 시간초과 났다... 미래의 나를 위해 기록함,, map도 잘써먹길 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Map; import java.util.TreeMap; public class bj20291 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int N = Intege..
https://subbak2.tistory.com/65 [BOJ 백준] 구간 합 구하기 5(11660) Java 링크 : https://www.acmicpc.net/problem/11660 문제 설명 : 더보기 N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다... subbak2.tistory.com 해당 블로그를 참조하였음 (설명 넘 잘되어있다ㅠㅠ) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public clas..
보통의 BFS문제인데, 3차원이라서 조금 더 코드가 늘어남.. 복잡하게 생각 안하고 z축 추가해서 평소처럼 풀어봤다. 근데 거리 자체를 배열에 써놓는 아이디어를 생각하지 못해서 조금 시간이 걸렸음 ㅠ.ㅠ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class bj7569 { // 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 static int[] dx = { 0, 0, -1, 1, 0, 0 }; static int[] dy =..
매번 쓰는 순열 메소드를 사용해서 풀었음. 근데 시간초과가 나서 엥 하면서 질문을 찾아봤는데 어떤사람이 StringBuilder 썼다고 해서 반신반의하면서 썼더니 해결됨.... 더 좋은방법이 있을것같기도 하다 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; // StringBuilder 쓰니 시간초과 해결됨.. public class bj15651 { static int[] numbers; static int N, M; static StringBuilder sb = new StringBuilder(); public static ..
자신의 모든 자리 수를 더하는 부분만 주의하면 될듯 public class bj4673 { static boolean[] d = new boolean[10001]; public static void main(String[] args) { for (int i = 1; i 10000) { return; } d[sum] = true..
주사위 전개도가 1번의 상태라고 하면, 동서남북으로 돌렸을때의 주사위 전개도를 생각해보며 동서남북으로 돌렸을때의 숫자 이동 함수를 만들어준다. (밑에 사진 참고) 주어진 조건대로 윗면밑면을 잘 생각해가며 구현하면 됨 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class bj14499 { // 0, 동 서 북 남 static int[] dx = { 0, 0, 0, -1, 1 }; static int[] dy = { 0, 1, -1, 0, 0 }; static int[] temp = new int[7]; stati..