본문 바로가기

[Dev] 🎯Self Study

[알고리즘] Do it! 파이썬

p15 - 

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

maximum = a
if b > maximum : maximum = b 
if c > maximum : maximum = c 

print (f'최댓값은 {maximum}입니다.')

한 문장씩 처리 -> 순차구조

if와 콜론(:) 사이에 있는 식 = 조건식

조건식으로 평가한 결과에 따라 실행 흐름이 변경 = > 선택 구조

print('이름을 입력하세요 : ', end ='')
name = input()
print(f'안녕하세요? {name} 님')

input 함수축약가능

name = input('이름을 입력하세요 : ')
print(f'안녕하세요? {name} 님')

 

- 형변환 : input() 은 문자열str 반환 --> 10진수 정수형 변환을 위해 int() 사용
- 2진수,8진수,10진수,16진수를 정수로 변환시 -->> int(문자열, 진수)
* float()함수는 float('문자열') 받고 실행결과 실수형 반환

프롬프트 창에 입력

int('17') #10진수문자열 10진수 정수형
int('0b110', 2) #2진수 문자열 10진수 정수형
int('0o75',8) #8진수 문자열 10진수 정수형
int('0x3f',16) #16진수 문자열 10진수 정수형 변환
float('3.14') #문자열을 실수형 변환

 


복합문의 구조 (if, while문)

if, while로 시작해서 콜론(:)으로 끝 -> 헤더
헤더의 마지막 콜론(:)은 '바로 뒤에 스위트가 이어집니다'

if식 : 스위트 (반드시 1개 필요)
elif식 : 스위트 (없거나, 있으면 n개 가능)
else식 : 스위트 (없거나, 있으면 1개 가능)

 

 

최댓값 구하기 실습, 근데 print로 값 넣어서 도출하기

def max3(a,b,c) :
    """a.b.c의 최댓값을 구하여 반환"""
    maximum = a
    if b > maximum : maximum = b
    if c > maximum : maximum = c
    return maximum #최댓값 반환

print(f'max3(3,2,1) = {max3(3,2,1)}')
print(f'max3(3,2,2) = {max3(3,2,2)}')
print(f'max3(3,1,2) = {max3(3,1,2)}')
print(f'max3(3,2,3) = {max3(3,2,3)}')
print(f'max3(2,1,3) = {max3(2,1,3)}')

""" 은 파이썬의 docstring (여러줄 입력시에도 가능)

 


최댓값을 구하는 max3()함수를 이용하여 작성한 프로그렘 
매개변수 a,b,c에 숫자를 입력받아 최댓값 반환


- 함수의 반환값, 함수 호출식 평가
함수 내부에서 처리한 값 반환 시 return 문
max3() 함수는 return 문에서 maximum 반환
실제 함수가 반환하는 값 얻으려면 함수 호출이 필요 = '함수 호출식을 평가해야 함수가 반환한 값을 얻을 수 있음'

ex. max3(3,2,1)처럼 함수를 호출하면, 세 값을 평가하여 3이라는 반환값 얻을 수 있음


알고리즘이란
어떠한 문제를 해결하기 위해 정해놓은 일련의 절차

올바른 알고리즘이란 ? 
어떠한 경우에도 실행 결과가 똑같이 나오는 것


--복합문 작성시 규칙--

복합문의 스위트는 반드시 행마다 같은 수준으로 들여쓰기 
들여쓰기는 공백 최소 1개이상, 권장은 공백 4개 (PEP 8)

if a < b :
    min2 = a #공백 4개 들여쓰기
    max2 = b #이 문장도 공백 4개로 들여쓰기 해야 if a<b : 에 종속되어 실행

 

만약 스위트가 단순문이면 헤더와 같은 행도 가능 
단순문이 2개 이상일 시 각각의 단순문을 세미콜론(;)으로 구분하여 헤더와 같은 행 가능
세미콜론 마지막 단순문에 놓기 가능 

 

if a < b : min2 = a #단순문 1개
if a < b : min2 = a ; max2 = b  #단순문 2개
if a < b : min2 = a ; max2 = b; #단순문 2개 (세미콜론 추가한 단순문)

but 스위트가 복합문이면 헤더와 같은 스위트를 같은 행에 포함시킬수 x 

 


 

세 정수의 중앙값

def med3(a,b,c) :
    """a,b,c 중앙값 구하여 반환"""
    if a >= b :
        if b >= c:
            return b
        elif a <= c :
            return a
        else:
            return c
    elif a> c:
        return a
    elif b > c:
        return c
    else :
        return b

print('세 정수의 중앙값 구하기')
a = int(input('정수 a 값을 입력하세요 : '))
b = int(input('정수 b 값을 입력하세요 : '))
c = int(input('정수 c 값을 입력하세요 : '))

print(f'중앙값은 {med3(a,b,c)}입니다.')

 

2번째 방법

def med3(a,b,c) :
    """a,b,c의 중앙값을 구하여 반환(다른 방법)"""
    if(b >=a and c <=a) or (b <= a and c >= a ) :
        return a 
    elif (a > b and c < b) or (a < b and c > b) :
        return b
    return c
    
    (생략)

 

p25

코드는 짧지만 효율은 위의 코드가 더 좋은 이유?

if 문의 조건식이 성립하지 않으면 (거짓이면)
이어지는 elif문은 이 판단을 수행할 필요가 없으므로 효율적이지 x 
(a와 b의 비교를 이미 마친 상태에서 다시 비교하는 것이 not 효율적)