목록Algorithm (13)
dearbeany
import java.util.*; class Solution { public int solution(int k, int[] tangerine) { int answer = 0; // 크기 다른 서로 다른 종류 수 Arrays.sort(tangerine); int length = tangerine[tangerine.length-1]+1; int[] arr = new int[length]; // 각각 귤 몇개인지 // i크기의 귤은 arr[i]개수만큼 있다 for(int i = 0; i < tangerine.length; i++){ for(int j = 1; j < arr.length; j++){ if(j == tangerine[i]){ arr[j]++; } } } Arrays.sort(arr); // 오름..
class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2]; int sum = brown + yellow; int w = 0; // 가로 int h = 0; // 세로 for(int i = 3; i < sum; i++) { w = sum / i; if(yellow == (w-2)*(i-2)){ answer[0] = w; answer[1] = i; break; } } return answer; } }
import java.util.*; class Solution { public String solution(String s) { s = s.toLowerCase(); StringTokenizer st = new StringTokenizer(s, " ", true); String answer = ""; String[] arr = new String[st.countTokens()]; for (int i = 0; i < arr.length; i++) { String token = st.nextToken(); if (token.equals(" ")) { answer += " "; } else { answer += token.substring(0, 1).toUpperCase() + token.substring(1..
import java.util.*; class Solution { public String[] solution(String[] names) { ArrayList list = new ArrayList(); for(int i = 0; i 배열로 class Solution { public String[] solution(String[] names) { int idx = 0; String[] answer = new String[names.length % 5 == 0 ? names.length / 5 : names.length ..
class Solution { public String[] solution(String my_string) { String[] words = my_string.trim().split("\\s+"); String[] answer = new String[words.length]; for (int i = 0; i < words.length; i++) { answer[i] = words[i]; } return answer; } } import java.util.*; // 임포트를 해줘야 함 class Solution { public String[] solution(String my_string) { StringTokenizer st = new StringTokenizer(my_string); int size =..

1. 다익스트라 알고리즘 - 시작정점에서부터 거리가 최소인 정점을 선택해나가면서 최단경로를 구한다. - 프림과 유사하나, 프림은 그때그때 선택정점과 인접정점들 중 최소비용 간선인 정점을 선택하는 반면 - 다익스트라는 중간 정점을 들른 비용이 더 작은지 갱신여부를 점검하여 최단경로를 구성한다. (결과적으로 시작정점은 고정) - 주의점: 다익스트라는 음의 가중치를 허용하지 않는다. (음의 가중치는 벨만-포드 알고리즘을 사용해야 함!) 더보기 - shortest path는 사이클을 포함하지 않는다. - 최단경로 알고리즘의 출력물 ? d[v] : 최단경로의 weight p[v] : 최단경로 자체 2. 동작과정 시작정점을 입력받는다. 거리를 저장할 배열인 dist를 ∞로 초기화한 후 시작점에서 갈 수 있는 곳의 ..

프림 알고리즘을 적용하여 최소 가중치의 합을 찾아보자. - 표의 첫 행: 해당 노드 번호 - p[V] : 해당 노드가 어떤 노드로부터 오는지. 즉, 부모 노드번호를 저장한다. - keys[V] : 해당 노드가 연결된 간선 중 최소 가중치 - visited[V] : 해당 노드가 방문했는지 여부 처음 keys 모든 값은 ∞로 세팅한다. 예시는 노드6번부터 출발한다. 6번이 시작점이므로 6번의 parent는 없고, 이제까지의 간선가중치도 없다. 따라서 p는 -1, keys는 0 p[6] = -1 keys[6] = 0 visited[6] = true (방문처리는 파란색으로 표시) 1. 6번부터 출발 0 1 2 3 4 5 6 p -1 keys ∞ ∞ ∞ ∞ ∞ ∞ 0 2. 인접 노드들의 가중치 갱신 - 6번은 0..
1. Minimum Spanning Tree Minimum : 가중치의 합이 최소 비용 Spanning : 모든 vertex를 포함 Tree : 사이클이 존재하지 않음 - 트리에 있는 모든 edge들의 weight 합이 작은 트리를 찾고자 한다. - Spanning Tree가 여러 개 존재할 수 있듯, MST도 unique하지 않을 수 있다. - 단, 다른 모양의 MST 있을 수 있지만 결과적으로 가중치의 합은 같아야 한다! - MST 구성하는 알고리즘엔 (1)크루스칼 (2)프림 이 존재한다. 2. Kruskal 알고리즘 '간선' 을 하나씩 선택해 MST를 찾는 알고리즘 모든 간선을 가중치 기준 오름차순 정렬 가중치 가장 낮은 간선부터 선택 단, 사이클 형성여부 확인해 (findSet) 대표가 다를 경우..