728x90
반응형

함수의 기본

def sum(a,b):
    return a+b

result = sum(1,2)
print(result) #3

입력값과 리턴값이 있는 함수 형태입니다.


def bus_rate(age):
        if age > 65:
            print("무료로 이용하세요")
        elif age > 20:
            print("성인입니다.")
        else:
            print("청소년입니다")

bus_rate(27) #성인입니다
bus_rate(10) #청소년입니다
bus_rate(72) #무료로 이용하세요

입력값은 있지만 리턴값은 없는 함수 형태입니다.





퀴즈) 주민번호를 입력받았을때 여성인지 남성인지 구해주는 함수를 만들자

def check_gender(pin):
    if int(pin.split('-')[1][0])%2==1:
        print('남성')
    else:
        print('여성')

my_pin = '200101-2012345'
check_gender(my_pin) #여성

split은 정말 자주쓰는 함수입니다. 잘 기억해두시면 아주 편리하게 코딩할 수 있습니다.

728x90
반응형
728x90
반응형

Java 문제풀이

import java.util.Scanner;
import java.util.LinkedList;
import java.util.Queue;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n= scan.nextInt();
		int k = scan.nextInt();
		Queue<Integer> q = new LinkedList<>(); 
		
		for(int i=0;i<n;i++) {
			q.add(i+1);
		}
		
		System.out.print("<");
		while (q.size()>0){
        	// 맨 앞에있던 숫자를 poll한 후 큐에 새로 추가하여 큐의 시작을 변경
			for(int i=0;i<k-1;i++) {
				q.add(q.poll());
			}
			System.out.print(q.poll());
			if (q.size()>0) {
				System.out.print(", ");
			}
		}
		System.out.print(">");
	}

}

요세푸스 문제를 더욱 효율적으로 풀어봤습니다.

파이썬으로 풀었을때는 어떻게 풀었는지 기억이 안나는데 이 방법이 가장 효율적인 것 같습니다.

 

큐를 선언하여 지정된 수 만큼의 숫자를 순차적으로 큐에 추가합니다.

k번째에 세어지는 숫자가 순차적으로 제거되기 떄문에 k-1번의 횟수만큼 큐의 맨 앞에 있는 숫자를 지웠다가 새로 추가하여 뒤로 보내는 작업을 합니다. 그러면 맨 앞에 있는 숫자가 k번째 숫자가 되기 때문에 그 숫자를 poll해줍니다.

 

출력은 <?, ?, ?, ?>형태로 하도록 되어있기 때문에 지저분해졌지만 문제는 풀었습니다..ㅎㅎ

 

728x90
반응형
728x90
반응형

영화진흥위원회 오픈API 사용하는 방법은 해당 포스팅을 봐주시면 감사합니다.

영화진흥위원회 오픈API 사용하는 방법 + csv 추출 :: 러아니푸의 공부방 (tistory.com)

 

영화진흥위원회 오픈API 사용하는 방법 + csv 추출

1. 영화진흥위원회 사이트에 들어가서 회원가입을 한다. 영화진흥위원회: https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do 2. 키 발급/관리로 들어가서 키를 발급받는다. 키 발급받기를 눌러줍니다...

fjdkslvn.tistory.com

 

 

from datetime import datetime, timedelta
import requests
import json
import pandas as pd

#날짜를 문자열로 변환하는 함수
def date_string(date):
    date_list = str(date).split()[0].split('-')
    date_str = date_list[0]+date_list[1]+date_list[2]
    return date_str

yourkey='당신의 영화진흥위원회 API키를 입력하세요' #((키 넣어주시면 됩니다!))

#원하는 날짜 +1 해주세요. 2018년 전체를 하고싶다면 (2019,1,1) ((날짜 수정해주시면 됩니다!))
date = datetime(2019,1,1)
date_str = date_string(date)
print(date_str)

# 2018년 1월1일까지만 할것이다 ((날짜 수정해주시면 됩니다!))
while date_str != '20180101':
    date = date - timedelta(days=1)
    date_str = date_string(date)
    print(date_str)

    url = 'http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key='+yourkey+'&targetDt='+date_str
    res = requests.get(url)
    text= res.text

    d = json.loads(text)

    movie_list = []

    x=d['boxOfficeResult']['showRange'] #박스오피스 일자 추출

    for b in d['boxOfficeResult']['dailyBoxOfficeList']:
        movie_list.append([x, b['movieNm'],b['movieCd'],b['audiCnt'],b['audiInten'],b['audiChange'],b['audiAcc']
                           ,b['openDt'],b['salesAmt'],b['salesShare'],b['salesInten'],b['salesChange'],b['salesAcc'],b['scrnCnt'],b['showCnt'],b['rank'],b['rankInten'],b['rankOldAndNew']])
    # rnum은 순번을 출력하는 것이기 때문에 안넣었습니다

    # 파일 이름 변경하는 곳 ((파일이름 수정해주시면 됩니다!))
    data = pd.DataFrame(movie_list)
    data.to_csv("2018_movie.csv", mode='a', encoding='utf-8', index=False)

csv 파일은 파이썬 파일이 저장된 위치에 저장됩니다.

 

주석에 설명을 달아놨습니다. yourkey에 영화진흥위원회에서 받은 API 키를 입력하고 시작날짜와 끝 날짜를 넣고 사용하시면 됩니다.

728x90
반응형
728x90
반응형

- 조건문

money = 3000

if money > 3800:
	print('택시를 타자!')
elif money > 1200:
	print('버스를 타자!')
else:
	print('걸어가자...')

 

 

- 반복문

for i in range(5):
	print(i) # 0 1 2 3 4

 

 

 

- 리스트와 반복문

fruits = ['사과', '배', '감', '귤']

for i in fruits:
    print(i) # 리스트 요소가 하나씩 출력된다

 

 

- 딕셔너리와 반복문

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for person in people:
    print(person['name'], person['age'], end=' ') # bob 20 carry 38 ...

 

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for person in people:
	if person['age']>20: #나이가 20보다 많은 사람만 출력
    	print(person['name'], person['age'], end=' ') # carry 38 ...

 

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for i, person in enumerate(people):
    print(i, person['name'], person['age']) # 0 bob 20 1 carry 38 ... 순번을 붙임
    if i > 3:
    	break #i가 3보다 커지면 종료된다

 

 

 

728x90
반응형

'언어 > Python' 카테고리의 다른 글

pyzbar 오류 해결 방법 / libzbar-64.dll 에러  (0) 2021.08.23
파이썬 함수  (0) 2021.07.16
파이썬 리스트와 딕셔너리  (0) 2021.07.07
파이썬 문자열 다루기  (0) 2021.07.06
파이썬 변수 선언과 자료형  (0) 2021.07.02
728x90
반응형

Python 문제풀이

# 프린터 큐
n = int(input())
result=[]
for i in range(n):
    a,b = map(int, input().split())# a는 문서의 개수, b는 출력 순번을 알고자하는 문서의 위치
    x= input().split()
    y=[]
    #y는 처음 입력받은 문서의 중요도 리스트
    for j in range(a):
        y.append(x[j])
    x.sort(reverse=True) #x는 문서의 중요도 리스트를 내림차순 시킨 것
    position=0 #y를 원형큐로 사용하기 위해 현재 위치를 나타내는 변수

    for j in range(a):# 문서의 개수만큼 반복
        while 1:
            if y[position] == x[j]: #만약 찾고있는 중요도가 리스트(y)에서 발견되었는데
                if position==b: #y에서 발견된 위치와 출력 순번을 알고자하는 문서의 위치가 동일하다면
                    result.append(j+1) # j+1번째에 출력되었습니다. (결과리스트에 추가)
                # 포지션 증가 (원형큐)
                if position == a - 1:
                    position = 0
                else:
                    position += 1
                break
            # 포지션 증가 (원형큐)
            if position == a-1:
                position=0
            else:
                position +=1

for i in range(n):
    print(result[i])

자세한 것은 주석에 작성하였습니다.

 

원형큐를 구현하기 위한 포지션 증가값의 코드 반복이 조금 거슬리긴 했지만 오늘은 문제를 풀은것으로 만족하겠습니다. 다음부터는 꼭 함수의 사용을..!

728x90
반응형
728x90
반응형

Python 문제풀이

n = int(input())
x=[]
sum=0
for i in range(n):
    num=int(input())
    if num !=0:
        x.append(num)
    else:
        x.pop()

for i in range(len(x)):
    sum+= x[i]

print(sum)

너무 간단한 문제입니다. 0이 아니면 push해주고 0이라면 pop을 해줍니다.

 

결국 마지막에 남은 값들을 더해서 그 값을 출력합니다.

728x90
반응형

+ Recent posts