본문 바로가기

알고리즘/School Algo Through Java

(9)
S-algo02 3자리 짝수찾기 빈도수 배열과 size변수를 이용하여 100의 자리에는 0이 올수 없도록 하고 1의 자리를 뽑을 때는 오로지 짝수만을 뽑도록 한다. 수학문제 푸는 거랑 똑같다. 머릿속으로 재귀트리 모형이 그려지면서 재귀함수 호출전 --frequency[i], 재귀함수 호출후 ++frequency[i]를 하는 것은 기계적으로 그려진다. 다만 이 문제만이 가지는 고유한 특성인 백의 자리에는 0이 들어가지 않고 오직 짝수인 100의 자리수를 어떻게 생성해 낼 것인지가 이 문제만이 가지는 특이점이다. 풀이법은 크게 두 가지이다. 1. 재귀를 이용한 풀이 2. 100~998까지의 숫자를 모두 탐색해 보기. import java.io.BufferedReader; import java.io.InputStreamReader; impo..
S-algo10 동적프로그래밍(1) countSum 보호되어 있는 글입니다.
S-algo10 동적프로그래밍(1) howSum 보호되어 있는 글입니다.
S-algo10 동적프로그래밍(1) cansum 보호되어 있는 글입니다.
School algo08 탐욕적(Greedy) 알고리즘(&자바복수비교문법) 복습. 탐욕적 알고리즘이란? 매 반복시 최선의 것을 선택하는 알고리즘 A. 마감시간이 있는 최적 스케줄링 문제 마감시간 있는 최적 스케줄 문제는 일에 대한 마감시간과 그에따른 이익이 함께 주워 진다. 그리고 구하는 것은 이익이 최대가 되는 스케줄이다. 우선 문제에 들어가기 앞서 참고하면 좋은 영상과 그 영상으로부터의 코드를 소개한다. https://www.youtube.com/watch?v=x9iDSJHV8F8 크루스칼에서는 feasible 과정이 있지만 같은 MST를 구하는 프림알고리즘에서는 feasible과정이 없다. 그 이유는 프림 알고리즘은 정점을 선택하는 것이기 때문이다. 프림 알고리즘에서 for문 사용으로 매번 다른 정점을 선택하는 코드 구조이다. 그렇다면 마감시간있는 프로젝트에서는 왜 fea..
School algo02 전수조사(답만 깔끔하게 제시한 버전) BestSum에서 특히 아래 글에서 제시한 복잡한 방법을 개선하고자 변경하였다. CanSum import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main{ public static boolean canSum(int target, int[]arr){ if(target==0) return true; if(target
School algo02 전수조사 재귀를 이용한 전수조사문제는 거시적 관점에서는 대부분 재귀트리를 내리락 오르락 하면서 답을 찾아나간다. 다만 세부적으로보면 올라가면서 답을 찾는 경우가 있고 완전히 내려와서 찾는 경우가 있다(물론 내려가면서 찾을수도 있지만 이 경우는 내가 경험해 본 바에 의하면 올라가면서 찾는 경우로 바꿀수 있고 그렇게 바꾸는게 더 코드가 좋다). 이는 어디까지나 세부적으로 보았을때 그렇다는 말이지 거시적으로는 대부분 내리락 오르락 하면서 답을 낸다. import java.util.Scanner; public class Main { // int[블록을 놓는 모양][모양에 따른 블록들의 상대좌표][상대 좌표] // 가장 왼쪽 위 블록을 기준으로 상대좌표를 산정한다. // (y좌표,x좌표) private static int..
그래프 탐색 BFS, DFS BFS public static void BFS(Listgraph, int start){ int size=graph.size(); Queueque=new LinkedList(); que.add(start); boolean[] visited=new boolean[size]; visited[start]=true; while(!que.isEmpty()){ int vertex=que.poll(); System.out.println(vertex+" "); for(var nextV: graph.get(vertex)){ if(!visited[nextV]){ que.add(nextV); visited[nextV]=true; } } } } 아래는 List 를 List[]로 바꾸어 표현한 것 // public static..