본문 바로가기

알고리즘 문제 풀이/Baekjoon

1300 - K번째 수

반응형
SMALL

 

 

1300번: K번째 수

세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B

www.acmicpc.net

 

#include <stdio.h>

typedef long long LL;

const LL MAX = 1e5 * 1e5;

LL N, M;
LL R;

LL min(LL x, LL y) { return x > y ? y : x; }

void init() {
  scanf("%lld", &N);
  scanf("%lld", &M);
}

LL cal(LL m) {
  LL count = 0;

  for (int n = 1; n <= N; ++n) {
    count += min(m, N * n) / n;
  }

  return count;
}

void bs(LL s, LL e) {
  if (s > e) {
    return;
  }

  LL m = (s + e) / 2;

  if (cal(m) >= M) {
    R = m;
    bs(s, m - 1);
  } else {
    bs(m + 1, e);
  }
}

int main(void) {
  // freopen("1300.txt", "r", stdin);
  
  init();

  bs(1, MAX);

  printf("%lld", R);

  return 0;
}

 

이분 탐색 + 수학 (구하려는 값보다 작은 수가 몇 개인지 어떻게 알 수 있을까 ?)

 

갯수 구할 때, 최소 구하기 어려웠당.

반응형
LIST

'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글

1849 - 순열  (0) 2023.12.24
18110 - solved.ac  (1) 2023.12.23
6236 - 용돈 관리  (2) 2023.12.22
1777 - 순열복원  (2) 2023.12.22
1306 - 달려라 홍준  (1) 2023.12.21