start -> end 로 갈때의 최단거리를 구하는 문제.


Dijkstra를 사용함.


만약 here -> there을 갈 때, 

int there = edges[here][i].v;

u -> here -> there 가 더빠른게 생기면 업데이트 된다.

if (distance[there] > nextDist) {


1 -> 3 -> 5

4다.


처음 1 -> 5 에 10

3 -> 5 1해가지고 3 + 1 = 4


int gcd(int a, int b){
int mod = 0;
while((mod = a % b)){
a = b;
b = mod;
}
return b;
}

이 부분을 다시 상기시켰다.

pow를 이용해 자리를 변경해줬다.


문자열을 다 입력받고, 빼야 될 index는 제외하고 출력하면 답이다.


1 ~ N 의 숫자를 차례대로 for loop을 돌린다.

약수의 개수가 홀수면 문이 열려있다.



그런데 약수의 개수가 홀수라면 완전제곱수이다.


그래서 1 ~ N까지의 완전제곱수 개수를 구하면 된다.

각 자리수의 숫자를 더해주고, 더해진 숫자가 1자리면 출력하고 아니라면 반복한다.


최대 1000자리의 숫자가 입력이 되니 BigInteger가 아니면 처리를 문자열로 해야된다.


그래서 생각해보니 1000 * 9 = 9000

최대 나올 수 있는 숫자가 9000이여서

문자열을 다 더해주고 하나하나 나눠주고 다 했다.


시그마 (0 -> 9) 가 i일때, 1 / i! 들의 합을 구하는것


로프를 병렬로 묶을 수 있다.


병렬로 묶는다는건 내림차순으로 정렬된 리스트가 있을때


그 리스트의 길이는 N 이라고 치자


그러면 시그마 i = N 시그마 i ~ N 의 값중에 제일 큰 값이 답이다.

처음에 선택정렬을 사용 => 시간초과

퀵 소트 사용 => 메모리초과

퀵 소트 특성상 마지막에 함수들을 부른다.

머지 소트 => 성공

머지소트는 먼저 함수들을 불러서 메모리가 적게든다.


친절한 문제다.

long long을 사용하라고 문제에 나와있다.


lcm = A * B / gcd


+ Recent posts