Baekjoon 문제 풀기 (2338번 : 긴자리 계산)Python

2338번 : 긴자리 계산

1. 멍청한 생각


map(int, input()) 으로 해결해보려고 했으나..

단순한 입출력 문제라고 생각해서 아래와 같이 코드를 만들었다.

a = map(int, input())
b = map(int, input())
print(a + b)
print(a - b)
print(a * b)
TypeError: unsupported operand type(s) for +: 'map' and 'map'

응~어림없지~ map은 튜플이나 리스트로 꼭 받아줘야 한다는 것을 까먹음.

a = list(map(int, input()))
b = list(map(int, input()))
print(a[0] + b[0])
print(a[0] - b[0])
print(a[0] * b[0])

그래서 이번엔 list함수로 감싸주고 다시 도전!!

ValueError: invalid literal for int() with base 10: '-'

여기서 2차 멘붕.. int함수가 '-'를 변환 못한다고 한다.
코드를 뜯어보는데 왜 이런 오류가 뜨는지 몰라서 당황…
알고보니 input함수는 무조건 문자열로 입력을 받는데 나는 -1이니깐 당연히 map함수가 알아서 int로 변환해주겠지~ 라고 생각한 것이였다.
그러나 사실은 '-' '1' 로 컴퓨터는 계속 입력을 받고 있었고… '-'을 먼저 int로 변환하려고 하니까 저런 오류가 계속 뜨는 것이었다.
이런 간단한 사실을 2시간이 넘게 고민했다.. 검색해도 (너무 간단한 얘기라) 나오지도 않아서 여기저기 아는 현직자들에게 다 물어보고.. 그러다가 갑자기 파바박! 하고 이해가 되었다.
창피했다.
아는 멘토 분이 input함수는 거의 split이랑 이어쓰는 이유가 이런 오류가 자주나서라고 하셨다.. 외워두어야겠다…

2. 제출 코드


이상한데서 삽질하다가 보니 심플하게 코드 완성

막혔던 부분

  1. map(int, input())으로 음수 받기 : split() 쓰기 (검색찬스)
  2. 때로는 간단한 코드가 답이다 : input()으로 입력받고 int형변환만 해주면 해결

간단하게 생각하는 버릇을 들이자!

a = int(input())
b = int(input())

print(a + b)
print(a - b)
print(a * b)

3. 공부할 것


  1. inputsplit과 함께 쓰기
    문자열로 받으니까 생각치 못한 오류가 생길 수 있다.
  2. map함수는 튜플이나 list로만 받는다
    또외워…

댓글남기기