본문 바로가기
JAVA/Programmers

JAVA 프로그래머스 [문자열을 정수로 바꾸기] 자바 Lv.1

by tripleup 2023. 8. 1.
728x90
반응형

[프로그래머스] 코딩테스트 연습 -> 연습문제 -> 문자열을 정수로 바꾸기

https://school.programmers.co.kr/learn/courses/30/lessons/12925


해결 과정

 

우선 이 문제의 경우 3가지로 조건을 나누어야 한다.

 

1. 맨앞이 부호 "-" 일 때

2. 맨앞이 부호 "+" 일 때

3. 맨앞에 부호가 없을 때 (숫자로 시작할 때)

 

if (s.charAt(0) == '-') {

} else if (s.charAt(0) == '+') {        
} else {
}

 

위와 같이 조건문에서는 s.charAt(0) 을 이용해 준다.

 

1. 맨앞이 부호 "-" 일 때

 for (int i=1; i<s.length(); i++) {
          answer +=(Integer.valueOf(s.charAt(i)) - 48) * Math.pow(10, s.length()-1-i);
 }

이렇게 나타낼 수 있는데, 먼저 s.charAt(i)를 Integer형으로 바꿔주고 아스키 코드이므로 숫자 48을 빼주어 본래 숫자로 나타나게 해준다. 거기에 자릿수를 표현하기 위해 Math.pow(10, s.length()-1-i)를 이용하여 맞춰준다.

 

반복문을 돌면서 answer 에 각 자리수에 대해 자릿수를 맞춘 것을 누적하여 더해주면 된다.

이때, s.charAt(0)은 이미 부호 자리이므로 반복문의 i는 1부터 시작해야한다.

 

그리고 음수로 만들어 줘야 하므로 answer 에 (-1)을 곱하여 마무리 한다.

 

2. 맨앞이 부호 "+" 일 때

-> 마찬가지로 1번과 같이 수행하고, 대신 -1을 곱하는 부분이 필요없다.

 

3. 맨앞에 부호가 없을 때

-> 이때는 2번과 같이 수행하면 되지만, 대신 i는 0부터 시작하면된다.

 

소스 코드

 

class Solution {
    public int solution(String s) {
        int answer = 0;
        
        if (s.charAt(0) == '-') {
           for (int i=1; i<s.length(); i++) {
            answer +=(Integer.valueOf(s.charAt(i)) - 48) * Math.pow(10, s.length()-1-i);
            }
            answer = (-1)*answer;
        } else if (s.charAt(0) == '+') {
            for (int i=1; i<s.length(); i++) {
            answer +=(Integer.valueOf(s.charAt(i)) - 48) * Math.pow(10, s.length()-1-i);
            }
        
        } else {
            for (int i=0; i<s.length(); i++) {
            answer +=(Integer.valueOf(s.charAt(i)) - 48) * Math.pow(10, s.length()-1-i);
            }
        }
        return answer;
    }
}

 


728x90
반응형

댓글