계속지나가기
코딩스뮤
계속지나가기
전체 방문자
오늘
어제
  • 코딩스뮤:)
    • Algorithm
      • 백준 문제풀이
      • 프로그래머스 문제풀이
      • 알고리즘 이론
      • 자료구조
      • SW Expert Academy
    • 인공지능(AI)
      • LLMs
      • 자연어처리(NLP)
      • 컴퓨터비전(CV)
      • 딥러닝(DL)
      • 머신러닝(ML)
      • 인공지능기초수학
      • 선형대수학
    • 컴퓨터 세팅
    • Computer Science
      • 유닉스프로그래밍
      • 프로그래밍언어론
      • 디자인패턴
      • 클린코드
      • SW 영어
      • 리눅스
      • 논리회로
    • Server
      • Docker

블로그 메뉴

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

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
계속지나가기

코딩스뮤

[Python] BOJ 1300. k번째 수
Algorithm/백준 문제풀이

[Python] BOJ 1300. k번째 수

2021. 1. 31. 12:49
반응형

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

    티스토리툴바