Algorithm/프로그래머스

[프로그래머스] Level1) 문자열을 정수로 바꾸기

햄습햄 2021. 10. 23. 22:34

문제 설명

 

문자열 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을 반환한다.