[Python] BOJ 1300. k번째 수

2021. 1. 31. 12:49·Algorithm/백준 문제풀이

www.acmicpc.net/problem/1300

 

 

1300번: K번째 수

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

www.acmicpc.net

 


문제 예제 해석

A : 3x3

  1 2 3
1 1 2 3
2 2 4 6
3 3 6 9

 

B : len(B) = 9 = 3x3

1 2 2 3 3 4 6 6 9

 

출력값 : B[7] = 6

 

- 임의의 숫자 m을 골라서 k번째 숫자인지 판단해보는 문제

- m을 이분 탐색으로 찾아보자 : m은 O(logK)

- m보다 작은 숫자의 개수를 어떻게 하면 빠르게 구할 수 있는가

   - A[i][j]에서, i행에 속한 숫자들은 i * j이므로 모두 i의 배수임

   - 따라서 min(mid/i, N)이 i번째 행에서 mid보다 작은(= 임의의 m보다 작은)숫자들의 개수가 됨

- 따라서 각 O(logK)에 대해, 1부터 N까지 모든 i행에 대해 m/i를 수행해주어야 하므로 총 시간 복잡도는 O(NlogK) 

 

N, K = int(input()), int(input())
start, end = 1, K

while start <= end:
    mid = (start + end) // 2
    tmp = 0
    for i in range(1, N+1) :
        tmp += min(mid // i, N)
    if tmp >= K:
        ans = mid
        end = mid - 1
    else:
        start = mid + 1
print(ans)
반응형

'Algorithm > 백준 문제풀이' 카테고리의 다른 글

[백준] 12865번: 평범한 배낭 - 파이썬(Python)  (0) 2024.06.10
[Python] BOJ 9663. N-Queen  (1) 2022.03.20
[C++] BOJ 1051. 숫자 정사각형  (0) 2020.09.30
[C++] BOJ 4386. 별자리 만들기  (0) 2020.09.23
[C++] BOJ 7576. 토마토  (0) 2020.09.16
'Algorithm/백준 문제풀이' 카테고리의 다른 글
  • [백준] 12865번: 평범한 배낭 - 파이썬(Python)
  • [Python] BOJ 9663. N-Queen
  • [C++] BOJ 1051. 숫자 정사각형
  • [C++] BOJ 4386. 별자리 만들기
계속지나가기
계속지나가기
NLP Engineer
  • 계속지나가기
    코딩스뮤
    계속지나가기
  • 전체
    오늘
    어제
    • 코딩스뮤:)
      • Algorithm
        • 백준 문제풀이
        • 프로그래머스 문제풀이
        • 알고리즘 이론
        • 자료구조
        • SW Expert Academy
      • 인공지능(AI)
        • LLMs
        • 자연어처리(NLP)
        • 컴퓨터비전(CV)
        • 딥러닝(DL)
        • 머신러닝(ML)
        • 인공지능기초수학
        • 선형대수학
      • 컴퓨터 세팅
      • Computer Science
        • 유닉스프로그래밍
        • 프로그래밍언어론
        • 디자인패턴
        • 클린코드
        • SW 영어
        • 리눅스
        • 논리회로
      • Server
        • Docker
      • 바이브 코딩
        • 클로드 코드
  • 블로그 메뉴

    • 홈
    • Who Am I(CV)
    • 태그
  • 링크

    • 깃허브 주소
  • 공지사항

  • 인기 글

  • 태그

    지도학습
    SIFT
    기계학습
    에지검출
    군집화
    경사하강법
    networkflow
    네트워크플로우
    디지털이미지처리
    LM
    파이썬 클린코드
    NLP
    DIP
    machinelearning
    알고리즘
    컴퓨터비전
    머신러닝
    ComputerVision
    ML
    언어모델
    손실함수
    결정경계
    MaximumFlow
    비용함수
    선형회귀
    패턴인식
    f1-score
    비지도학습
    DigitalImageProcessing
    최대유량
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
계속지나가기
[Python] BOJ 1300. k번째 수

티스토리툴바