[프로그래머스] Level1) 문자열을 정수로 바꾸기
문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
제한 조건
- s의 길이는 1 이상 5이하입니다.
- s의 맨앞에는 부호(+, -)가 올 수 있습니다.
- s는 부호와 숫자로만 이루어져있습니다.
- s는 "0"으로 시작하지 않습니다.
풀이 과정 (자바)
String형 s를 Int형으로 변환 후, 반환했다.
결과
다른 사람의 풀이
부호 구분은 boolean 형식인 Sign으로 하고, true로 초기화했다.
for문은 입력받은 String형의 s 길이만큼 돌렸다.
s를 한 문자씩 체크해서 - 라면 Sign을 false (음수)로 바꿨고,
-, +도 아니면(숫자) result 값을 계산해서 넣었다.
자릿수를 하나씩 늘리기 위해 10을 곱했고, char형을 아스키코드가 아닌 실제 입력 값으로 계산하기 위해 '0'을 빼서 처리했다.
-1234라면
i = 0)
Sign이 false 됨
i = 1)
0 * 10 + ('1' - '0') => 1
i = 2)
1 * 10 + ('2' - '0') => 12
i = 3)
12 * 10 + ('3' - '0') => 123
i = 4)
123 * 10 + ('4' - '0') => 1234
기타
처음에는 부호끼리, 숫자끼리 처리하려는 마음으로 코딩을 진행했는데 'ParseInt를 쓰자'는 생각이 들었다. 알고리즘 문제인데 너무 간단하게 끝나기를 바란 거 아닌가 싶다.
또한 이전에 문자끼리 계산하면 숫자를 반환한다는 것을 알았는데
문자끼리 계산하지 않고, 문자에 숫자를 바로 계산하면
그 문자는 사용자가 생각하는 값이 아닌 아스키코드에 기반을 둔 값을 반환한다는 것을 추가로 배웠다.
예를 들어, 입력 값이 A(=1)일 때 결과를 1을 얻고 싶다고 한다.
이때,
1 * A를 하면 1이 아닌 49를 반환한다.
1 * (A - '0')을 해야 1을 반환한다.