Algorithm/알고리즘

문자열을 정수로 바꾸기

한둥둥 2023. 12. 13. 16:41

문자열을 정수로 바꾸기

문제 설명

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건
  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 "0"으로 시작하지 않습니다.
입출력 예

예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

 

 

문제 풀이 :)

1. charAt함수로 문자열 하나씩 뽑기 

2. 음수와 양수를 어떤 방식으로 구분하여 숫자로 출력 시켜줄 것인지. 

3. 10자리씩 어떤방식으로 곱하여 구할 것인지. 

 

내가 푼 방식 

음수와 양수는 for문 안에서 if문으로 분기처리하여 구해주었다. 

10자리 씩 어떤 방식으로 곱하여 구할 것인지.. 고민을 한참하다가 parseInt로 구해주었다. 

 

class Solution {
    public int solution(String s) {
        int N = s.length();
        int answer = 0;
        String str_answer="";
        for(int i=0;i<N;i++){
            char c = s.charAt(i);
            if(c=='+') continue;

            str_answer += c;

            if(N-1==i)
                answer = Integer.parseInt(str_answer);

        }
        return answer;
    }
}

 

결과론적으로 말하면 내가 짠 코드는 굉장히 별로다.. 사실 Integer.parseInt로 풀이를 하려면 굳이 for문을 구현하지 않아도 되었다. 

 

또한 이번문제는 이미 있는 함수를 사용하는 것이 아닌 문자열을 나누는 알고리즘을 구현하라는 것이 제작자의 의도인거 같다.

그래서 다른 사람의 풀이를 확인하고 해당 방식을 어떻게 구현하였는지 살펴보자. 

 

class Solution {
    public int solution(String s) {
        int answer = 0;
        int result = 0;
        boolean flag = true;
        for(int i=0; i<s.length(); i++){
            char ch = s.charAt(i);
            if(ch == '-') flag = false;
            else if(ch != '+') result = result * 10 + (ch - '0');
            if(i==s.length()-1) answer = flag? 1 * result : -1 * result;
        }
        
        return answer;
    }
}

 

다른 분이 짜신 코드다. 여기에 나의 생각대로 추가적으로 코드를 개선하여 만들어주었다. 

 

우선 2번 째, 음수인지 양수인지 - , + 를 판별하기 위하여 flag 라는 boolean타입을 for문 밖에 선언하여 음수인지 양수인지 판별할 수 있는 변수를 만들어주었다. 

그 후,  10씩 곱해주는 부분은 else if부분으로 가장 우선적으로 들어온 값이 사실상 마지막 기준으로 계속해서 10을 더해주어야 하는 부분이기에 result 변수를 *10 씩 해주어 10씩 곱해주는 부분을 처리해주었으며, (ch - '0')

'0'은 10진수 기준으로 32부터 시작하며 '1' , '2' , '3' 은 33, 34, 35 이런식으로 시작하여 

'1' - '0' => 33 - 32 => 1 

'2' - '0' => 34 - 32 => 2

'3' - '0' => 35 - 32 => 3 

이런식으로 되어 1,2,3 된다. 

 

해당 방식은 아스키 코드를 사용한 방식이다. 

마지막 if문은 문자열이 마지막일 경우, flag를 통해 음수 또는 양수처리를 해준다.