티스토리 뷰

문제 설명

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

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


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

 


나의 답

class Solution {
    public int solution(String s) {

        if(s.charAt(0) == '-')
            return - Integer.parseInt(s.substring(1, s.length()));
        
        else if (s.charAt(0) == '+')
            return Integer.parseInt(s.substring(1, s.length()));
            
        else
            return Integer.parseInt(s);
   
    }
}
정확성  테스트

테스트 1 〉	통과 (0.03ms, 76.4MB)
테스트 2 〉	통과 (0.04ms, 73.2MB)
테스트 3 〉	통과 (0.05ms, 73MB)
테스트 4 〉	통과 (0.05ms, 76.8MB)
테스트 5 〉	통과 (0.04ms, 67.8MB)
테스트 6 〉	통과 (0.03ms, 73.9MB)
테스트 7 〉	통과 (0.04ms, 73.8MB)
테스트 8 〉	통과 (0.04ms, 72.3MB)
테스트 9 〉	통과 (0.04ms, 77.1MB)
테스트 10 〉	통과 (0.04ms, 77.4MB)
테스트 11 〉	통과 (0.03ms, 73.7MB)
테스트 12 〉	통과 (0.04ms, 77.7MB)
테스트 13 〉	통과 (0.02ms, 75.8MB)
테스트 14 〉	통과 (0.03ms, 75.6MB)
테스트 15 〉	통과 (0.03ms, 72MB)

채점 결과
정확성: 100.0
합계: 100.0 / 100.0

 

자기 평가 : 이제 막 코테의 맛을 보고 있는 사람의 정말 일차원 적인답.. 그래도 통과는 했네..

 

풀이 과정 : 

1. 문자열을 정수로 바꿔주는 메서드 parseInt를 사용해 보자.

2. parseInt는 Integer Class에 있다.

3. 부호가 맨 앞자리에 있다고 했으니 '-', '+', 없는 경우로 나누어서 if-else 문을 짜야겠다.

4. 부호를 제외한 나머지 문자열을 substring으로 잘라서 parseInt에 넘겨주면 되겠다.

5. 각각의 조건문에서 부호 붙여서 반환해 주면 끝!

 


느낀 점

프로그래머스는 문제를 푼 후에 바로바로 다른 사람의 풀이를 볼 수 있는 게 참 재미있다. 이번 문제는 간단한 문제인데도 풀이 방법이 다양해서 신기했다. 내가 생각만 하고 넘어갔던 아이디어를 사용해 실제 문제를 푼 사람들의 코드를 보면 굉장히 반가운 기분이 들기도 한다 ㅋㅋㅋ 

 

다른 사람의 코드를 보고 해석하는 건 그 사람의 사고를 들여다볼 수 있는 시야를 가지게 되는 것 같다.

 

 

 

 

가장 놀랐던 풀이는 이거였다. 단 한 줄이었던 코드.

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

 

네? 부호도 인식을 한다고요? 

 

 

바로 오라클 Interger 클래스 문서에 접속..

 

 

parseInt 메서드는 더 정교하게 사용할 수 있었다..

 

static int  parseInt(CharSequence s, int beginIndex, int endIndex, int radix) Parses the CharSequence argument as a signed int in the specified radix, beginning at the specified beginIndex and extending to endIndex - 1.
static int  parseInt(String s) Parses the string argument as a signed decimal integer.
static int  parseInt(String s, int radix) Parses the string argument as a signed integer in the radix specified by the second argument.

 

 

 

 

문서 내용을 정리해 보면, 다음과 같다.

 

 

0. int형 값을 반환한다.

따라서 int 범위에 맞는 문자열만 변환이 가능하다!

 

1. 문자열이 '+'('\u002B') 나 '-'('\u002D')로 시작하는 경우 이를 인식해 구문해석을 한다.

즉 양수, 음수가 부호로 표기된 문자열도 해석이 가능(!) 하다. 

 

2. 인수로 기수*를 전달할 수 있다! 

반환값의 형태를 2진수, 16진수 등으로 지정할 수 있다.

*숫자 표현(진법체계)에 기준이 되는 수  radix-2 : 2진법 , radix-10 : 십진법

parseInt("0", 10) returns 0
parseInt("473", 10) returns 473
parseInt("+42", 10) returns 42
parseInt("-0", 10) returns 0
parseInt("-FF", 16) returns -255
parseInt("1100110", 2) returns 102
parseInt("2147483647", 10) returns 2147483647
parseInt("-2147483648", 10) returns -2147483648
parseInt("2147483648", 10) throws a NumberFormatException
parseInt("99", 8) throws a NumberFormatException
parseInt("Kona", 10) throws a NumberFormatException
parseInt("Kona", 27) returns 411787

 

 

3. 문자열의 인덱스 범위를 지정해 숫자를 추출할 수 있다 !

가장.. 놀라웠던 기능... 일정한 문자 + 숫자로 이루어진 문자열에서 쓰기 좋을 것 같다.

parseInt("sss1234", 3, 6, 10) returns 123
parseInt("sss1234", 3, "sss1234".length(), 10) returns 1234
parseInt("sss12-34", 3, 6, 10) throws a NumberFormatException

 

 

 

학부생시절 교수님께서 정말 강조하셨던 메서드라 잘 알고 있다고 생각했는데, 사용법 하나 제대로 알지 못해 부끄러웠다 ㅎㅎ..

앞으로는 좀 더 공식문서들을 참고해서 메서드를 뜯어보고 사용하는 습관을 길러야겠다!  

 

 

 

 

 

감사합니다.

 


공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

 

'JAVA' 카테고리의 다른 글

코드 컨벤션이란? (feat. JAVA)  (0) 2022.08.25
댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday