Open robert-min opened 1 year ago
https://school.programmers.co.kr/learn/courses/30/lessons/42860?language=java
설명 참고
class Solution {
public int solution(String name) {
int answer = 0;
int n = name.length();
int idx;
int move = n - 1;
for (int i = 0; i < n; i++) {
// 1 : 글자 변환
answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
// 2 좌우 이동 확인
idx = i+1;
while (idx < n && name.charAt(idx) == 'A') {
idx++;
}
// 순서대로 이동, 처음부터 반대로 이동한 것중 더 빠른 경우
move = Math.min(move, i * 2 + n - idx);
move = Math.min(move, (n - idx) * 2 + i);
}
return answer + move;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42883?language=java
포인트 : 처음부터 k자리까지 수 중 가장 큰 수가 시작점. 해당 시작점부터 leftNum을 넘지 않는 수 중 가장 큰 수를 선택
class Solution {
public String solution(String number, int k) {
StringBuilder answer = new StringBuilder();
int len = number.length() - k;
int start = 0;
while (start < number.length() && answer.length() != len) {
// leftNum - k 만큼의 자리수를 구해야 함
int leftNum = k + answer.length() + 1;
int max = 0;
for (int j = start; j < leftNum; j++) {
// 자리수까지 가장 큰 수를 찾고 시작점 정의
if (max < number.charAt(j) - '0') {
max = number.charAt(j) - '0';
// 가장 큰 수의 다음 수 부터 탐색
start = j+1;
}
}
// 가장 큰 수 정의
answer.append(Integer.toString(max));
}
return answer.toString();
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42885?language=java#
import java.util.*;
class Solution { public int solution(int[] people, int limit) {
Arrays.sort(people);
// 1. 최대 2명만 탑승할 수 있기 때문에 가장 가벼운 1명 + 무거운 1명이 탑승할 수 있는지 확인
int answer = 0;
int start = 0;
int end = people.length - 1;
while (start <= end) {
if (people[start] + people[end] <= limit) {
start++;
}
// 2. limit을 초과하면 무거운 사람만 배를 탐.
end--;
answer++;
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42861
import java.util.*;
// 0
class Node implements Comparable
public Node(int nodeNum, int weight) {
this.nodeNum = nodeNum;
this.weight = weight;
}
@Override
public int compareTo(Node o) {
return weight - o.weight;
}
}
class Solution {
static List<ArrayList<Node>> graph;
static boolean[] visited;
static int[] dist;
static void dikstra(int n,int start){
PriorityQueue<Node> Q = new PriorityQueue<>();
visited = new boolean[n];
dist = new int[n];
Q.add(new Node(start, 0));
while (!Q.isEmpty()) {
Node node = Q.poll();
int now = node.nodeNum;
int w = node.weight;
if (!visited[now]) {
visited[now] = true;
dist[now] = w;
for (Node nx : graph.get(now)) {
Q.add(new Node(nx.nodeNum, nx.weight));
}
}
}
}
public int solution(int n, int[][] costs) {
// 1
graph = new ArrayList<>();
for (int i = 0; i < n; i++) {
graph.add(new ArrayList<>());
}
for (int i = 0; i < costs.length; i++) {
int u = costs[i][0];
int v = costs[i][1];
int w = costs[i][2];
graph.get(u).add(new Node(v, w));
graph.get(v).add(new Node(u, w));
}
// 2
dikstra(n, 0);
// System.out.println(Arrays.toString(dist));
// 3
int answer = 0;
for (int i = 1; i < n; i++) {
answer += dist[i];
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=java
체육복 (배열 -> 리스트.contians())
class Solution {
// System.out.println(Arrays.toString(student)); int answer = 0; for (int i = 1; i <= n; i++) { if (student[i] >= 1) { answer++; } }
}