티스토리 뷰
문제 설명
문자열 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 |
---|