'컴퓨터' 카테고리의 글 목록 (4 Page) :: 테크니션
반응형

"토마토"나 "기러기"처럼 거꾸로 읽어도 똑같은 단어를 '팰린드롬(palindrome)'이라고 부릅니다.

팰린드롬 여부를 확인하는 함수 is_palindrome을 작성하려고 하는데요. is_palindrome은 파라미터 word가 팰린드롬이면 True를 리턴하고 팰린드롬이 아니면 False를 리턴합니다.

예를 들어서 "racecar"과 "토마토"는 거꾸로 읽어도 똑같기 때문에 True가 출력되어야 합니다. 그리고 "hello"는 거꾸로 읽으면 "olleh"가 되기 때문에 False가 나와야 하는 거죠.

실행 결과

True

False

True

True

False

def is_palindrome(word):

# 코드를 입력하세요.

oword = list(word)

rword = list(reversed(word))

k = True

for i in range(len(word)):

k = (oword[i] == rword[i])*k

return bool(k)

# 테스트

print(is_palindrome("racecar"))

print(is_palindrome("stars"))

print(is_palindrome("토마토"))

print(is_palindrome("kayak"))

print(is_palindrome("hello"))

반응형
반응형

이진트리는 트리를 효율적으로 사용하기 위해서 일정한 형태로 정의한 것이다.

탐색을 위한 자료구조로 저장할 데이터의 크기에 따라 노드의 위치를 정의한 것이 이진탐색트리

(Binary Search Tree) 이다

조건 : 왼쪽 서브트리의 키값 < 루트 키값 <오른쪽 서브트리 키값

샘플을 보자

15가 루트 // 10(왼쪽 서브트리 ) < 15(루트)<20(오른쪽 서브트리)

하위 트리도 정의를 적용해보면 맞는걸 확인 가능하다

장점은 계산 복잡성이 O(logn)으로 빠르다

배열은 순차적으로 모든 데이터를 확인하며 나아가는 데에 반해서,

이진 탐색 트리는 서치 과정에서 탐색 해야하는 데이터를 줄여 나가기 때문에

데이터 검색 속도에서 더 높은 기댓값을 가진다.

구현(파이썬이라 들여쓰기가 안맞을수 있어요)

class Node:

def __init__(self, value):

self.value = value

self.left = None

self.right = None

class Tree: # Binary Search Tree

def __init__(self):

self.head = None

def insert(self, value):

if self.head is None:

self.head = Node(value)

else:

node = self.head

while True:

if value < node.value:

if node.left is None:

node.left = Node(value)

break

else:

node = node.left

else:

if node.right is None:

node.right = Node(value)

break

else:

node = node.right

def delete(self, value):

if self.head is None:

return False

node = self.head

parent = self.head

check = False

while node:

if value == node.value:

check = True

break

elif value < node.value:

parent = node

node = node.left

else:

parent = node

node = node.right

if not check:

return False

# Case1 No Child

if node.left is None and node.right is None:

if value < parent.value:

parent.left = None

else:

parent.right = None

# Case2 Have a One Child

elif node.left and node.right is None:

if value < parent.value:

parent.left = node.left

else:

parent.right = node.left

elif node.left is None and node.right:

if value < parent.value:

parent.left = node.right

else:

parent.right = node.right

# Case3 Have Two Child

elif node.left and node.right:

current, child = node, node.right

while child.left:

current, child = child, child.left

node.value = child.value

if current != node:

if child.right:

current.left = child.right

else:

current.left = None

else:

node.right = child.right

def search(self, value):

if self.head is None:

return False, None

depth = 0

node = self.head

while True:

if value == node.value:

return True, depth

else:

if value < node.value:

node = node.left

else:

node = node.right

if node is None:

return False, None

depth += 1

def show(self, node, depth=0):

if node is None:

return

print(node.value, depth)

self.show(node.left, depth+1)

self.show(node.right, depth+1)

def print(self):

self.show(self.head)

tree = Tree()

tree.insert(5)

tree.insert(7)

tree.insert(1)

tree.insert(2)

tree.insert(8)

tree.insert(3)

tree.insert(4)

tree.insert(6)

tree.insert(9)

tree.print()

result = tree.search(5)

print(result)

print()

tree.delete(7)

tree.print()

반응형
반응형

PYKRX라는 python용 오픈소스를 활용하여 종목명 <-> 종목번호를 바꿔서 활용할 수 있는 코드를 작성해보자

종목명을 받아서 종목코드로 환산하면

시장에서의 위치 판단의 로직으로 들어갈 수 가 있고

연산이 끝나면 이를 다시 종목으로 알려주도록 하기 위함이다

종목코드를 이름으로 바꾸는 모듈은 PYKRX에서 제공하고있다

def num_to_name(list):

GOL_K_NAME = []

for ticker in list:

GOL_K_NAME.append(stock.get_market_ticker_name(ticker))

return GOL_K_NAME

종목명을 종목코드로 변환해보자

df = stock.get_market_price_change("20220325 "20220325" ,market="ALL")

해당 코드를 출력하면

이 DATAFRAME에서 앞에 종목명 / 티커만 리스트로 바꿔서 비교연산을 통해서 티커를 출력하고자 한다

숫자연산이 아니어서 binary search를 쓸 수 없어서 Linear search로 작성하였다

df = stock.get_market_price_change(“20220325”, ‘“20220325” ,market="ALL")

NUMM = []

df_number = df.index.tolist()

df_names = np.array(df['종목명'].tolist())

for k in range(0, len(LIST)):

for i in range(0, len(df)):

if LIST[k] == df_names[i]:

NUMM.append(df_number[i])

return NUMM

반응형
반응형

코드는 간단하다. 그 전에 해야 할 사전 패키지 설치만 알아보자

1. youtube_dl 설치

가) pip install youtube_dl

나) 파이참 File - settings

Project code - python interpreter 클릭

상단 + 버튼 클릭

youtube_dl 작성 후 클릭 및 Install Package 클릭

아래와 같은 글자가 나오면 코드로 이동

2. CODE

import youtube_dl

with youtube_dl.YoutubeDL() as ydl:

ydl.download(['주소'])

주의 : 저작권에 위배되는 행동을 하지맙시다.

반응형
반응형

인터넷에서 쉽게 구할 수 잇는 문제이므로 제가 멈칫 했던 부분만 간단히 점검하겠습니다.

[문제]

밑에 나와 있는 chicken.txt 파일을 보세요.

제가 운영하는 치킨집 '코딩에빠진닭(이하 코빠닭)'의 12월 매출이 정리되어 있습니다.

1일: 453400

2일: 388600

3일: 485300

4일: 477900

5일: 432100

6일: 665300

7일: 592500

8일: 465200

9일: 413200

7일: 592500

8일: 465200

9일: 413200

10일: 523000

11일: 488600

12일: 431500

13일: 682300

14일: 633700

15일: 482300

16일: 391400

17일: 512500

18일: 488900

19일: 434500

20일: 645200

21일: 599200

22일: 472400

23일: 469100

24일: 381400

25일: 425800

26일: 512900

27일: 723000

28일: 613600

29일: 416700

30일: 385600

31일: 472300

chicken.txt 파일을 읽어 들이고

strip과 split을 써서 12월 코빠닭의 하루 평균 매출을 출력하세요.

평균을 구하기 위해서는 총 매출을 총 일수로 나누면 됩니다.

참고로 현재 제공된 파일에는 31일이 있지만, 어떤 달은 31일이 아닐 수도 있습니다.

이 점을 고려해서 확장성 있는 코드를 작성해 주시길 바랍니다.

출력 결과는 아래와 같습니다.

501916.12903225806

[답안]

with open('data/chicken.txt', 'r', encoding='UTF=8') as f: # chicken.txt 파일 위치에 따라 맞춰주세요

t_revenue = 0 # 총 매출

t_days = 0 # 총 날수

for line in f:

data = line.strip().split(": ") # /n삭제(화이트페이스), ": " 기준으로 잘라내서 보관

revenue = int(data[1]) # 이부분이 이해가 잘 안됩니다.

l_days += 1

l_revenue += revenue

[포인트]

revenue = int(data[1])

print(data[1]) 하면

453400

388600

485300

.

.

요렇게 나오고 print(data[0])하면 날짜들이 하나씩 출력됩니다.

여기서 for line in f: 를 해석하는 방법을 외우?시면 도움이 되는데

for line in f: 에 의해 line 에는 txt 파일의 한줄씩 할당이 됩니다.

text 파일 전체를 불러오는게 아닌거죠

그러니까 for이 한번 돌아갈때마다 한줄씩만 불러오니 그 데이터를 data[1]에 저장

data[0]은 oo일

정수형으로 반환되려면 int 를 data 라는 배열에 붙여준거죠

너무 당연한 이야기인데 딕셔너리와 리스트 개념을 이해하셧으면 더 쉽게 작성 하셨을 거라 생각합니다.

좋아요1
공유하기
통계
게시글 관리
 
반응형

+ Recent posts