D.S.
Übermensch : To a Brighter Future
D.S.
전체 방문자
오늘
어제
  • 분류 전체보기 (109)
    • Lecture Notes (1)
      • CS231n (1)
    • Thoughts on Videos (ToV) (7)
    • Tech (0)
    • 개인 기록 (0)
      • 프로그래밍공부일지 (0)
      • CS Study 한눈에 보기 (0)
    • 프로그래밍 (65)
      • C (35)
      • C++ (0)
      • Python (12)
      • 이코테python (8)
      • 2022군장병AI_SW_Elice (4)
      • 2022군장병AI_SW_Kakao (1)
      • Solidity (2)
      • Web (3)
    • Mental Augmentation (28)
      • Kwik Reading (22)
      • 독서 (0)
      • 갸꿀팁 (2)
      • 3-Part Memory Training (1)
      • Kwik Recall (3)
    • Physical Augmentation (3)
      • Health Journal (2)
      • Sinclair Podcast (1)
    • Others (0)
      • 여행 (0)
    • Idea Bank (0)
      • VBA (0)
      • PLANS (0)
    • 22-2학기 수업 (0)
      • 데이터베이스시스템 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

글쓰기

Kwik Reading

공지사항

인기 글

태그

  • 속발음
  • kwik recall
  • 기술독서
  • 짐 퀵
  • Kwik Reading
  • 뇌 요가
  • 습관
  • 학습
  • 백준
  • Jim Kwik
  • brain yoga
  • 번역
  • 속독
  • Dandapani
  • 노화의 종말
  • Eye Fixation
  • brain break
  • Kwik Brain
  • 비문학독해
  • elice
  • ai/sw
  • 디지털 방해
  • 속독 훈련
  • baekjoon
  • 군장병
  • 우뇌
  • subvocalization
  • 독서
  • lifespan
  • Infinity Technique

최근 댓글

hELLO · Designed By 정상우.
D.S.

Übermensch : To a Brighter Future

이코테 Ch.7 Binary Search 문제 풀이
프로그래밍/이코테python

이코테 Ch.7 Binary Search 문제 풀이

2022. 8. 31. 20:29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#Binary Search Implementation
import sys
inp = list(map(int,sys.stdin.readline().rstrip().split()))
arr = []
for i in range(len(inp)):
    arr.append((inp[i],i)) #(원래원소, index)
t = int(input())
arr.sort(key=lambda x:x[0])
 
def binary_search(arr,st,ed,target):
    if st==ed:
        if arr[st][0]==target:
            return arr[st][1]
        else:
            return -1
    mid = (st + ed) // 2
    if target < arr[mid][0]:
        return binary_search(arr,st,mid-1,target)
    elif target > arr[mid][0]:
        return binary_search(arr,mid+1,ed,target)
    else:
        return arr[mid][1]
ln = len(arr)-1
result = binary_search(arr,0,ln,t) + 1
if result == -1:
    print("N/A")
else:
    print(result)
Colored by Color Scripter
cs
1
2
3
4
#Input
 
1 10 2 9 3 8 7 4 6 5 2
4
cs
1
2
3
#Output
 
8
cs

<(1)부품 찾기>

import sys
n = int(input())
shop = list(map(int,sys.stdin.readline().rstrip().split()))
m = int(input())
customer = list(map(int,sys.stdin.readline().rstrip().split()))
min_ = min(shop)
max_ = max(shop)
count = [0]*(max_-min_+1)
for i in shop:
    count[i-min_] += 1
for i in customer:
    if count[i-min_]>0:
        print('yes',end=' ')
    else:
        print('no',end=' ')
Colored by Color Scripter
cs

<(2)떡볶이 떡 만들기> #Parametric Search

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
 
n, k = map(int, input().split())
ls = list(map(int,sys.stdin.readline().rstrip().split()))
start = min(ls)
end = max(ls)
result = 0
 
while start<=end:
    mid = (start + end) // 2
    sum_ = 0
    for i in ls:
        if i > mid :
            sum_ += i - mid
    if k>sum_:
        end = mid-1
    else:
        result = mid
        start = mid + 1
        break
print(result)
Colored by Color Scripter
cs

<(3)정렬된 배열에서 특정 수의 개수 구하기>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import sys
n,x = map(int,input().split()) #n은 원소개수, x는 특정수
arr = list(map(int,sys.stdin.readline().rstrip().split()))
 
def count_x(arr,x):
    #일단 특정수 하나 찾기
    start = 0
    end = len(arr)-1
    target = -1
    while start <= end:
        mid = (start + end) // 2
        if arr[mid] > x:
            end = mid - 1
        elif arr[mid] < x:
            start = mid + 1
        else:
            target = mid
            break
    if target == -1:
        return target
    #특정수 하나의 index를 이용해서 좌측 끝과 우측 끝의 index찾기
    #좌측 index
    start = 0
    left_idx = target
    end = left_idx
    while start <= end:
        mid = (start + end) // 2
        if arr[mid] < x: #이건 범위 벗어날 걱정 X(mid<=left_idx)
            start = mid + 1
        else: #arr[mid]==x
            if mid>0:
                if arr[mid-1] != x: #좌측 index 발견
                    left_idx = mid
                    break
                else:
                    end = mid -1
                    left_idx = end
            else:
                left_idx = mid
                break
    #우측 index
    start = target
    right_idx = target
    end = len(arr)-1
    while start <= end:
        mid = (start + end) // 2
        if arr[mid] > x: #이건 범위 벗어날 걱정 X(mid<=left_idx)
            end = mid - 1
        else: #arr[mid]==x
            if mid<len(arr)-1:
                if arr[mid+1] != x: #좌측 index 발견
                    right_idx = mid
                    break
                else:
                    start = mid + 1
                    right_idx = start
            else:
                right_idx = mid
                break
    return right_idx - left_idx + 1
 
print(count_x(arr,x))
Colored by Color Scripter
cs

 

 

'프로그래밍 > 이코테python' 카테고리의 다른 글

이코테 Ch.8 Dynamic Programming 문제 풀이  (0) 2022.09.02
이코테 Ch.6 Sorting 문제 풀이  (0) 2022.08.29
이코테 Ch.5 DFS/BFS 문제 풀이  (0) 2022.08.27
이코테 Ch.4 Implementation 문제 풀이  (0) 2022.08.26
무지의 먹방 라이브 (2019 카카오 블라인드 공채 Level4)  (0) 2022.08.20
    '프로그래밍/이코테python' 카테고리의 다른 글
    • 이코테 Ch.8 Dynamic Programming 문제 풀이
    • 이코테 Ch.6 Sorting 문제 풀이
    • 이코테 Ch.5 DFS/BFS 문제 풀이
    • 이코테 Ch.4 Implementation 문제 풀이
    D.S.
    D.S.

    티스토리툴바