본문 바로가기
🍪 Ect/#Study

[99클럽 코테 스터디] 4일차 TIL 문자열

by 개발한 너굴씨 2024. 7. 25.
728x90



 

 

오늘의 문제는 프로그래머스

 

문자열을 정수로 바꾸기

 

 

문제 

 

 

 

문제 접근 및 풀이 과정

 

문제의 권장 풀이 시간은 30분이었고, 저는 3분이 걸렸습니다. 

 

완전탐색으로 풀었으면 예외 처리 때문에 오래 걸렸을 것 같은데 메서드를 활용해 풀었기 때문에 시간을 단축할 수 있었습니다. 

 

 

 

문제 접근 방식

 

처음 문제를 접했을 때, 메서드를 활용해서 풀면 되겠다는 생각을 했습니다. 그래서 valueOf() 메서드를 활용해 문제를 풀었습니다. 

 

 

문제 풀이

class Solution {
    public int solution(String s) {
        
        int answer = Integer.valueOf(s);
        
        return answer;
    }
}

 

valueOf() 메서드를 사용한 이유는? 

 

문자열을 숫자로 변환할 때 자주 사용해 익숙한 valueOf() 메서드를 사용했습니다. 하지만 막상 문제를 풀고 나서 생각해 보니, 기본형 데이터를 객체로 변환해 사용할 필요가 없기 때문에 parseInt() 메서드를 사용하는 것이 더 효율적일 것 같다는 생각이 들었습니다. 

 

parseInt() 메서드를 사용한 풀이

class Solution {
    public int solution(String s) {
       
       int answer = Integer.parseInt(s);
       
       return answer;
    }
}

 

 

 

완전 탐색을 활용한 풀이 

 

메서드를 활용해 문제를 해결한 후, 완전 탐색을 통한 추가 풀이도 진행했습니다.

 

완전 탐색을 이용한 풀이는 예외처리가 필요해 시간이 조금 더 걸렸습니다. 

 

class Solution {
    public int solution(String s) {
        
        int mark = 1; // 부호 
        
        int indexNum = 0; // 시작 인덱스  
        
        if (s.charAt(0) == '-') { // 문자열이 '-'로 시작하는 경우
            
            mark = -1;  
            
            indexNum = 1;  
        } 
        
        else if (s.charAt(0) == '+') { // 문자열이 '+'로 시작하는 경우
            
            indexNum = 1;  
        }
        
        int answer = 0;
        
        for (int i = indexNum; i < s.length(); i++) {
            
            answer = answer * 10 + (s.charAt(i) - '0');
        
        }
        
        return answer * mark;  
    }
}

 

주어진 문제에서 문자열은 '-', '+' 그리고 부호없음으로 나뉘기 때문에, 조건문을 활용해 모든 경우를 처리하려 했습니다. 이를 간소화 하고자 시작 인덱스를 변수로 선언하여 부호가 있는 경우에는 시작 인덱스를 1로, 없는 경우를 0으로 초기화 하는 식으로 코드를 작성했습니다. 

 

그리고 부호 변수는 기본적으로 1 즉, 양수로 설정하고 '-'가 올 경우 -1 을 할당하여 이후 반복문에서 나온 answer 값에 부호 변수를 곱해 반환했습니다. 

 

 

 

이렇게 오늘 4일차 TIL을 작성해 보았습니다. 

 

728x90

댓글