새벽_나그네
12시 지난 새벽
새벽_나그네
전체 방문자
오늘
어제
  • 분류 전체보기
    • TIL
    • DevLog
    • Algorithm
    • ComputerScience
    • etc

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • docker
  • portfolio
  • 코딩
  • 프로그래머스
  • 국비지원
  • 자기주도학습
  • TodayILearned
  • Github
  • 개발일지
  • AI트랙
  • 내일배움카드
  • til
  • machine learning
  • Python
  • 코딩프로젝트
  • Selenium 4
  • 코린이
  • 내일배움캠프
  • 스파르타코딩클럽
  • 내일배움단

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
새벽_나그네

12시 지난 새벽

Algorithm

[백준_1300] K번째 수

2022. 6. 14. 20:08

문제 보기: https://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

문제

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

배열 A와 B의 인덱스는 1부터 시작한다.

 

입력

첫째 줄에 배열의 크기 N이 주어진다. N은 105보다 작거나 같은 자연수이다. 둘째 줄에 k가 주어진다. k는 min(109, N2)보다 작거나 같은 자연수이다.

출력

B[k]를 출력한다.

 

풀이 과정

1. 이진 탐색을 이용한 문제 이전 문제도 이진 탐색이어서 같은 아이디어로 생각하였습니다.

2. int 형태로 변수 두 개를 입력받은 후 이 것을 이용하여 중간 값과 비교하여 탐색을 합니다.

3. n값은 이차원 배열과 1차원 배열의 크기를 나타내 줄 수 있는 값이기 때문에 end값을 구하는 데 사용하도록 합니다.

4. mid+1 값을 start값으로 설정하면서 반환 시켜서 원하는 값을 얻어줍니다.

 

코드

n = int(input())
k = int(input())

def binary_search(target, start, end):
    while(start <= end):
        mid = (start + end) // 2

        cnt = 0
        for i in range(1, n+1):
            cnt += min(mid//i, n)

        if cnt >= target:
            end = mid-1
        else:
            start = mid+1
    return start


print(binary_search(k,1,n*n))
저작자표시 비영리 변경금지 (새창열림)

'Algorithm' 카테고리의 다른 글

[백준_3009] 네 번째 점  (0) 2022.06.16
[백준_10814] 나이순 정렬  (0) 2022.06.15
[백준_2110] 공유기 설치  (0) 2022.06.13
[백준_2559] 수열  (0) 2022.06.12
[백준_1427] 소트인사이드  (0) 2022.06.11
    'Algorithm' 카테고리의 다른 글
    • [백준_3009] 네 번째 점
    • [백준_10814] 나이순 정렬
    • [백준_2110] 공유기 설치
    • [백준_2559] 수열
    새벽_나그네
    새벽_나그네
    IT, 프로그래밍, 정보, 스마트스토어

    티스토리툴바