본문 바로가기
알고리즘 풀이

[algorithm] 백준 : 10869 사칙연산 풀이

by 째깍단 2023. 3. 29.

힘든 개인과제를 끝내고 해설도 듣고..

자신감이 넘쳐 신나서 백준을 켰다.

 

신나서..... 켰다..

 

a, b = int(input().split())


def calculator():
    sum = a + b
    sub = a - b
    mul = a * b
    div = a / b
    extra = a % b

    print(sum)
    print(sub)
    print(mul)
    print(div)
    print(extra)


calculator(a, b)

자 여기에서 문제점은?

 

1. int로 input().split()을 묶었다

 

2. 함수가 문제다

 

3. 나누기를 했다

 

정답은 ~ 셋 다 입니다^.^...

자꾸 문법이랑 조건 생각안하고 쓰면 큰일이 납니다..

 

 

 

문제 1번을 분석해보자

input() 받은 string"a b"를  split()으로 [a, b]로 나누었다

그러니까 지금 print(type)을 해본다면 list니까 int로 감싸는 것은 옳은 문법이 아니다!

 

그래서 다시 map으로 돌아갔다.

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

기억해.. map(변환할 조건 1개, 값'들' 입력)

 

 

문제 2번을 분석해보자

혼자 고민해도 알 수 없는 문제.

'함수'에 대한 이해가 부족했기에 빛빛님의 특강을 들었다..

 

 

함수란 어떤 인풋을 받고 아웃풋을 내어놓는 것이고

프로그램은 이러한 함수들이 모여서 인풋에 대한 아웃풋을을 내어놓는 것이다.

 

함수에는 함수 시그니처가 있는데..

값을 받는 '인풋 갯수' '각 인풋 타입' '아웃풋(리턴타입)' 이 있다.

 

위에 작성한 함수 시그니처는 ()=> None,

그러니까 인풋이 없고, 인풋타입고 없고 리턴할 값도 없다..(print로 뱉어버렸기 때문) 그래서 안되는 거였군

 

함수 시그니처에 대해 좀더 써둔다.

더보기

이렇게 함수가 어떤 시그니처를 가지는지 주석으로 다는 습관을 가지자

def asdf(a:str):          #(a: string)=>integer
      return int(a)
def add(a,b):          #(a,b: any)=>any
      return a+b
def check(a,b):          #(a,b: any)=>boolean
      return a==b

 

+

모든 것은 파일이다..

stdout stderr stdin 삼형제가 있따

얘네도 결국은 파일처럼 다뤄진다..

stdout 파일에 들어있는것이 print = 출력해서 나가버림

 

+

return은 값을 반환해주는것..

 

+

calculater(a,b)라고 쓴건 글로벌로 참조를 하도록 쓴것이지,

함수 자체에 파라미터를 준게 아니다.

꼭! 함수에는 인풋값인 파라미터를 적어주어야하고, 그래야 로컬로 사용할 수 있다..

디질랜드 당하기전에 잘하자..

 

 

 

분석에 특출난 챗지피티에게 물어보았다   #마지막에 열어볼 것!

더보기

그러니까 함수에는 매개변수가 필요하고, 몇개를 쓸지 어떤 타입을 넣을지 생각해서 적어줘야하고.. 
그 변수가 함수 내에서 로컬로 작동하도록 넣어줘야한다는 것. 그리고 아웃풋이 원하는 대로 나오는지도 고려할 것!

 

 

아직은 영 알 수 없는 문제인 것 같아 함수 정의를 벗겨내고 그냥 각각의 변수와 계산만 남겼다....

 

 

고치고보니 print가 여러 개인게 보기 싫어서 리스트로 묶어서 출력해보려 한다.

7 3을 넣으면 [10, 4, 21, 2.3333333333333335, 1]

깔끔한 리스트가 나온다.

 

 

조건 맞추기 : 한 줄에 하나씩 출력

이제 구글링으로 리스트를 한 줄씩 출력하는 방법을 찾아본다.

 

1) for문으로 하나씩 불러오기(앗 이건 이제 혼자 작성할 수 있어!!)

for i in cal_list:   #깔끔하게 성공
    print(i)

 

 

2) print()의 sep 옵션 활용하기

print() 에 sep옵션에 원하는 것을 넣어 출력할 수 있다.

default값은 공백

하지만 list는 강했따

list에 우선 순위가 있어서인듯.

만약 이 방법을 활용하고 싶다면 list 선언을 하지 않고 각각의 변수를 모아다가 적용하면 된다.

print(sum, sub, mul, div, extra, sep="\n")

 

3) unpacking option 사용하기

cal_list = [sum, sub, mul, div, extra]

print(*cal_list, sep="\n")

모든을 뜻하는 *애스터리스크를 list앞에 붙이고, sep옵션으로 사이사이 엔터를 쳐준다.

 

 

 

문제3

조건 한 가지가 틀렸다

/ 나누기

// 몫..

조건에서 몫을 구하라고했다..

문제를 잘 보자..!

 


느낀 점:

오 꽤나 발전한 나

그러나 아직 부족한 나..