https://www.acmicpc.net/problem/1000
나는 이직을 위하여 파이썬을 공부하게 되었다.
다들 공부를 하면서 코딩테스트를 보라고 추천을 해줬다.,
백준 코딩테스트 사이트를 알게되어 문제를 풀어보려고 했다.
나는 기본적인 파이썬 언어는 공부를 했다고 생각했고, 가벼운 마음으로 문제를 시작했다.
근데 큰 오산이었다. 시작부터 큰 벽에 부딪혔다.
1000번이었다.
문제는 아래와 같았다.
시작부터 난관이었다.
나는 왜 위와 같은 답이 나왔는지 하나하나 뜯어보기로 했다.
우선 내가 쉽게 알 수 있는 부분은 '출력' 이었다.
A+B를 출력 = print(A+B) 이 부분은 간단했다.
그 다음은, A와 B 두 정수를 입력받은 부분이었다.
위 문제에서 보면 첫째 줄에 A와 B가 주어진다고 한다.
해당 값을 가져오기 위해서는 입력함수 input()을 이용하여야 한다.
다만, 이 부분에서 유의할 점은 input()를 사용할 경우 문자열로 인식을 하게 된다.
그렇기 때문에 숫자를 입력하였다 하더라도 int 를 사용하여 정수로 변환해준다.
<class 'str'>
<class 'int'>
다음 문제는 입력받는 값을 하나의 변수에 저장하는 부분에서 문제가 있다.
입력값을 한 자릿수의 숫자만 입력할 경우 위 와 같은 오류가 뜬다.
번역하자면, Value 값은 두 개가 필요하지만, 1개의 값만 입력이 되었다는 것이다.
입력값을 두 자릿수의 숫자로 입력할 경우에는 정상출력이 된다.
만약, 세 자릿수 이상의 숫자를 입력할 경우에는 어떻게 출력이 될까 ?
위와 같은 오류가 발생한다.
번역하자면 2개의 값인데, 너무 많은 Value가 입력되었다고 한다.
위와 같은 결과를 보았을 때,
input()에 숫자를 입력할 경우, 한 글자에 하나의 변수 값이 지정된다는 점을 알게 된다.
나는 그래서 답이
어떤 부분이 문제였는지 살펴보니, 이부분이 문제였다.
A의 값이 두 자릿수, 세 자릿수 이상일 수 도 있다는 것이었다.
그렇다면 이 부분은 어떻게 해결을 해야할까 ?
spilt() 함수이다.
split()은 문자열을 나눠주는 함수이다.
괄호 안에 기호나 특정 글자를 입력해주면 해당 글자에서 분류를 해주고, 공백으로 둘 경우 띄어쓰기를 기준으로 나눈다.
['ABC', ' FDE', 'F', ' GHI']
['ABC, ', 'DE,', ', GHI']
우리는 input().split() 함수를 사용하여, 입력값의 띄어쓰기를 기준으로 값을 나누어 입력받게 한다.
그러면 우리가 제출할 코드는 아래와 같다.
🎉드디어 정답이다!🎉
우리는 위 한 문제로 인하여, input() 함수의 특징과 split() 함수의 특징을 배울 수 있었다.
Ps. 정답과 비교하니 정답은 더욱 간결하였다.
내가 제출한 정답과 차이점은
print() 안에 int 함수가 map() 라는 함수 안으로 들어갔다.
그렇다면 map()는 어떤 함수 일까 ?
map(func, *iterables) --> 맵 객체
각 반복 가능 항목의 인수를 사용하여 함수를 계산하는 반복자를 만듭니다. 가장 짧은 iterable이 소진되면 중지합니다.
<class 'str'> <class 'str'>
10 20
<class 'int'> <class 'int'>
10 20
<class 'float'> <class 'float'>
해당 코드를 실행한 결과 위와 같은 결과값이 나오는 것을 확인할 수 있다.