코딩테스트 .. 공부 잘안하니까 다 까먹었다.. 다시 처음부터 해야할듯
문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
제한 조건
s의 길이는 1 이상 5이하입니다.
s의 맨앞에는 부호(+, -)가 올 수 있습니다.
s는 부호와 숫자로만 이루어져있습니다.
s는 "0"으로 시작하지 않습니다.
입출력 예
예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.
이 문제는 사실 되게 간단한 문제라 코딩테스트 문제라고 하기 어렵다.
간단하게 푼다면 이렇게 풀면 끝남
public int solution(String s) {
int answer = 0;
return Integer.valueOf(s);
}
근데 다른 사람들이 푼거 보니까, 내장함수를 안쓰고 풀려고 했던 사람들이 많아서 그방식이 좋을것 같아 나도 쉬운 문제면 다른 방식을 좀 써서 풀어보려고 한다.
여기서 문제를 풀기 위해서는 아스키 코드를 알면 좀 편하게 풀 수 있다. - > 아스키코드 핵심 패턴
처음에 아스키코드가 필요한 이유는 문자열을 숫자로 변경하기 위해서다. 아스키 코드는 문자열을 숫자로 계산하기 위한 방법임
0=48, 1=49 만약 '1' - '0' = 49 - 48 =1 이렇게 숫자 계산이 가능하다.
위 문제에서 주어지는 문자열은 부호와 숫자로만 이루어져 있으며
길이는 1이상 5이하 최대 length는 5라는 소리
+1234, -1234, 1234 이런식으로 숫자가 들어올 수 있다는뜻
문제를 풀어보쟈.
public int solution(String s) {
int answer = 0;
// 음수인지 아닌지 구분하기 위한 구분자
boolean negative = false;
// 문자열 s를 받았을때 부호가 포함되어있는지 체크한다.
// 부호가 있으면 구분자값으로 음수인지 양수인지 기억하고 부호를 제거한다.
if(s.contains("-")){
s=s.replace("-","");
negative=true;
}else{
s=s.replace("+","");
}
//문자열의 길이 만큼 계산하기
for(int i=0; i<s.length(); i++){
// chatAt(i)로 해당 인덱스의 문자열을 char로
// 가져오고, char끼리 연산을 하면 자동으로 아스키 코드로 계산한다.
answer = answer * 10 + (s.charAt(i)-'0');
}
// 그리고 만약 부호가 음수였다면 -1를 곱해준다.
if(negative){
answer*=-1;
}
return answer;
}