본문 바로가기

두두의 알고리즘/문제

[손코딩] 문제 1~3

728x90

1. 회문은 순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어와 문장을 의미함. 회문을 판별할 수 있는 함수를 리스트 슬라이싱을 활용해서 만드세요

ex) rumur

질문 ex) string 변수에 null(None)이 올 수 있는지, null이 왔을 때 함수의 리턴값이 무엇이 되어야 하는지

 

2. 특정 기간 동안의 가격 변화가 주어졌을 때, 그 주식 한 주를 한번 사고 팔아 얻을 수 있는 최대 수익을 계산하는 알고리즘을 만들어 보세요

질문 ex) 가격 변화가 어떻게 주어지는지 : 파이썬 리스트 형태로 원화 형태로 가격(숫자)이 주어짐 (0번 인덱스가 가장 이전 시간, 그리고 순차적으로 해서 마지막 인덱스가 가장 나중 시간)

output : [최대수익, 언제 샀는지, 언제 팔았는지에 대한 인덱스 번호]

def find_max_profit(stock_prices):
	last_date = len(stock_prices)
    max_profit = [0,0,0]
    
    for buy_date in range(last_date-1):
    	for sell_date in range(buy_date+1, last_date):
        	profit = stock_prices[sell_date] - stock_prices[buy_date]
            if profit > max_profit[0]:
            	max_profit = [profit, buy_date, sell_date]
    return max_profit
    
stocks = [9000,8000,7000,8000,10000,5000,7000]
print(find_max_profit(stocks))
#고급 요구사항 들어간 코드
def find_max_profit(stock_prices):
	last_date = len(stock_prices)
    max_profit = [0,0,0]
    min_price, min_date = stock_prices[0], 0
    
    for current_date in range(1, last_date):
    	profit = stock_prices[current_date] - min_price
        if profit > max_profit[0]:
        	max_profit = [profit, min_date, current_date]
        if min_price > stock_prices[current_date]:
        	min_prices, min_date = stock_prices[current_date], current_date
    return max_profit
    
stocks = [9000,8000,7000,8000,10000,5000,7000]
print(find_max_profit(stocks))

 

 

1. 하나의 문자열과 라인 길이를 나타내는 숫자가 주어지고, 라인 길이만큼 문자열을 자르고 줄바꿈 기호를 넣되 문자열 안에 스페이스가 있을 경우 보기 좋게 하기 위해, 스페이스가 있는 부분에서 줄바꿈 기호를 넣도록 코드를 구현하세요.

ex) "abc def ghdddddd fffff" => abc d / ef gf /  ghdd보다 abc / def / gf / hdd가 낫다

질문 ex) string, max_line이 null(None)이 오는 경우가 있는지, null이 온다면 어떻게 처리를 할지, max_line도 마이너스나 0이 올 수 있는지, string, max_line의 최대값이 어떻게 되는지, 앞에 스페이스가 있다면? 

def line_edit(string, max_line):
	if string == None or max_line==None or len(string) < max_line:
    	return string
        
	for index in range(max_line-1,0,-1):
    	if string[index] == '':
        	return string[:index] + '\n' + line_edit(string[index:].lstrip(), max_line)
    return string[:max_line] + '\n' + line_edit(string[max_line:].lstrip(), max_line)

 

4. 하나의 배열이 주어지고, 해당 배열의 각 데이터는 숫자임. 배열 절반의 길이보다 큰 갯수만큼 특정 숫자가 들어가 있으면 해당 숫자, 그렇지 않으면 -1을 리턴하는 함수를 만들어라

ex) [2,7,7,7,1,7,2], 리턴값: 7