KT AIVLE [1주차] - Pyhton

김채원·2023년 2월 2일
0

KT_AIVLE

목록 보기
2/18

파이썬 교육은 이홍주 강사님이 맡으셨다.
나긋나긋하고 여유롭게 진행하시는게 특징이었다.
점심 이후는...이건 근데 식곤증이 심한 내 탓인듯...
안 졸려고 밥 먹고 엄청 움직였는데..


이론 📝

  • 알고리즘 : 어떠한 문제를 해결하기 위해 정해 놓은 일련의 절차
  • 올바른 알고리즘 : 어떠한 경우에도 실행 결과가 맞게 나오는 것

input() : 기본적으로 사용자 입력값이 str
요즘은 sys 모듈을 코테에서 쓰는 곳도 많이 보인다.
이쪽으로 습관을 들이려고 노력중인데 SWEA같은 곳은 안 쓰더라?
왔다갔다 좀 불편한데 어쩔 수 없지.

💡 사용 이유

한 두줄 입력받는 건 괜찮은데, 반복문으로 여러줄 입력 시 input()의 시간초과 발생 가능성 문제 때문.

💡 sys.stdin.readlin()

📌 한 개의 정수

import sys
a = int(sys.stdin.readline())

📌 정해진 개수의 정수를 한줄에

a,b,c, = map(int, sys.stdin.readline().split())

📌 임의의 개수의 정수를 한줄에

data = list(map(int,sys.stdin.readline().split())

n줄은 그냥 n을 따로 입력 받고 for문 돌리면 된다.

📌 문자열 n줄을

data = [sys.stdin.readline().strip() for _ in range(n)]

+++

📎 내가 자주 쓰는 입력문법, str 쪼개기

lst = list(str(data))

이리저리 쓰고 추가사항 있으면 계속 추가할 것이다.

+++
a이상 b미만의 구간이 N개의 갯수를 구하는 것이 직관적이라고 다익스트라가 증명

a,b = b,a 가 파이썬에서 가능한 이유 : (b,a)의 튜플이 되는데 대입할때 튜플이 다시 풀려서 각각 들어감


미니실습 📌

미니실습 1

네 정수의 최댓값 구하기

교육에 맞춘 답

print('네 정수의 최댓값을 구합니다.')
a = int(input('정수 a의 값을 입력하세요.: '))
b = int(input('정수 b의 값을 입력하세요.: '))
c = int(input('정수 c의 값을 입력하세요.: '))
d = int(input('정수 d의 값을 입력하세요.: '))

maximum = a
if b > maximum:
    maximum = b
if c > maximum:
    maximum = c
if d > maximum:
    maximum = d
    
print(f'최대값은 {maximum}입니다.')

보자마자 생각한 내 풀이 (섭섭할까봐 for문도 넣어줌)

def my_max(lst):
    n_max = max(lst)
    return n_max

def my_max2(lst):
    n_max = 0
    
    for num in lst:
        if num > n_max:
            n_max = num
    return n_max

    
lst = list(map(int,input("숫자사이를 띄워주세요.(네 개의 정수): ").split()))
answer = my_max(lst)
answer2 = my_max2(lst)
print(f'가장 큰 정수는 {answer}')
print(f'가장 큰 정수는 {answer2}')

미니실습 2

수도요금 계산하기

def waterPay(company,amount):
    if company == 'A':
        result = amount*100
    else:
        if amount <= 50:
            result = amount*150
        else:
            result = 150*50 + (amount - 50)*75 

    return result

company = input("A or B? : ")
amount = int(input("How much usage? : "))
answer = waterPay(company,amount)
print(f"수도 요금은 {answer}원입니다.")

사실 귀찮아서 예외처리를 안 함..ㅎㅎ;
한다면 elif company == 'B': 하고 else: 에서 처리

미니실습 3

반복 과정에서 조건 판단하기

print('a부터 b까지 정수의 합을 구합니다.')

a = int(input('정수 a를 입력하세요.: '))
b = int(input('정수 b를 입력하세요.: '))

if a > b:
    a, b = b, a
    
sum = 0

for i in range(a, b):
    print(f'{i} + ', end='')
    sum +=i
    
print(f'{b} = ', end='')
print(sum+b)

미니실습 4

area = int(input('직사각형의 넓이를 입력하세요.: '))

for i in range(1, area + 1):    
#     if (area % i) : continue
    print(f'{i} x {area // i}')

실습 📌

실습 1

def electricPay(amount):
    if amount < 100 :
        pay = 410 + amount * 60.7 #100미만이면 여기서 계산 끝남
        
    elif amount<= 200 : 
        pay = 910 + 100 * 60.7 + (amount-100)*125.9
        
    else:
        pay = 1600 + 100 * 60.7 + 100*125.9 + (amount-200)*187.9
        
    pay = int(pay + (pay*0.1) + (pay * 0.037))
    return pay
        
        
amount = int(input())
print(f'전기요금은 {electricPay(amount)}원 입니다.')

실습 2

num = int(input())

for _ in range(num//2):
    print("+",end="")
    print("-",end="")
if num % 2:
    print("+",end="")
    

실습 3

for num in range(1,13):
    if num == 8: continue
    print(num,end=" ")

실습 4

num = int(input())
flag = 0

for root in range(2,num+1):
    for pwr in range(2,6): #  1<pwr<6 조건
        result = root ** pwr  #거듭제곱
        if result == num : 
            print(f"{int(root)} ** {pwr} = {num}")
            flag = 1
            
 if flag == 0:
 	print("결과 없음")

추가실습 📌

추가실습 0

두 정수의 최대 공약수 구하기

def GCD(a, b):
    if a > b:
        a,b = b,a
    while b :
        a,b = b,a%b
    
    return a

a,b = map(int,input().split())
print(GCD(a,b))

추가실습 1

두 정수의 최대 공배수 구하기

def solution(a,b):
	answer = (a*b)//GCD(a,b) # 위 함수 활용
    return answer

추가실습 2

백준 1110번 : 더하기 사이클

num = int(input()) #리스트처럼 써먹기
ori_num = num
cnt = 0 #사이클 횟수


while True:
    a = num//10 #몫을 구함 num=98이면 여긴 9
    b = num%10 # 나머지를 구함, 여긴 8
    c = (a+b)%10 # 9+8을 10으로 나눈 나머지
    			 # 17%10 = 7
    num = b*10+c #새로운 숫자 만들기 (87)
    
    cnt += 1 #새숫자 만들어져서 count

    if ori_num == num: # 원래 수로 돌아오면 break
        print(cnt)
        break

추가실습 3

프로그래머스 약수의 개수와 덧셈

제곱수는 약수의 개수가 홀수

def solution(left, right):
    answer = 0
    cnt = 0
    for num in range(left,right+1):
        if int(num**0.5) == num**0.5: #제곱수니까 -
            answer -= num
        else:						  #아니니까 +
            answer += num
        
    return answer

추가실습 4

data = input('숫자로 이루어진 문자열을 입력하세요. ')
lst = list(map(int,data))
result = 0

for num in lst:
    if num == 0 or num == 1:
        result += num
    else:
        if result == 0 :
            result += num
        else:
            result *= num

print(result)

아...기호도 추가해야했다...몰랐네...

data = input('숫자로 이루어진 문자열을 입력하세요. ')
result = int(data[0])
print(result,end=" ")

for i in range(1,len(data)):
	num = int(data[i])
	if num <= 1 ot result <=1:
		result += num
		print("+ "+str(num),end=" ")
	else:
		result *= num
		print("x "+str(num),end=" ")

print('= '+str(result))

추가실습 5

백준 18406번 : 럭키 스트레이트

num = input()

idx = int(len(num))//2

lst = list(map(int,num[:idx]))
lst2 = list(map(int,num[idx:]))

if sum(lst) == sum(lst2):
    print("LUCKY")
else:
    print("READY")

추가실습 6

프로그래머스 정수 제곱근 판별

def solution(n):
    answer = n**(1/2)
    
    if answer%1 == 0:
        answer = (answer+1)**2
    else:
        answer = -1
    return answer
profile
잡다한 공부 기록용

0개의 댓글