정수 num
과 k
가 매개변수로 주어질 때, num
을 이루는 숫자 중에 k
가 있으면 num
의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
num
< 1,000,000k
< 10num
에 k
가 여러 개 있으면 가장 처음 나타나는 자리를 return 합니다.class Solution {
public int solution(int num, int k) {
int answer = 0;
String num_s=Integer.toString(num);
char[] num_arr=num_s.toCharArray();
for(int i=0; i<num_arr.length; i++){
if(num_arr[i]==Character.forDigit(k,10)){
answer=i+1;
break;
}else{
answer=-1;
}
}
return answer;
}
}
처음에는 정수(int)
타입의 k를
문자(char)
타입으로 변환해야 하는데
char k_s=(char) k;
로 형변환을 시도했다.
하지만 이렇게 형변환을 하면 아스키 코드 값에 해당하는
문자가 출력되어 잘못된 결과가 나온다.
* 이럴 경우 '0'의 아스키 코드 값인 48
을 더하거나,
'0'을 더하면 원하는 결과를 얻을 수 있었다.
class Solution {
public int solution(int num, int k) {
int answer = 0;
String num_s=Integer.toString(num);
char k_s=(char)(k+'0');
char[] num_arr=num_s.toCharArray();
for(int i=0; i<num_arr.length; i++){
if(num_arr[i]==k_s){
answer=i+1;
break;
}else{
answer=-1;
}
}
return answer;
}
}
하지만 (Char)로 형변환을 할 경우, 10+'0'의 값은 :
이고,
10 이상의 값은 표현할 수 없다.
그래서 찾아보니 int형을 char형으로 변환
하는
java.lang 패키지의 Character
클래스의
메소드 forDigit()
을 사용하면 효율적이게 변환할 수 있었다.
Character.forDigit(int digit, int radix)
특정 숫자를 해당하는 진법으로 변환함
int형을 char형으로 변환하는 메소드
digit 부분에는 변환할 정수를 입력하고,
radix 부분에는 몇 진법으로 변환할지 입력하면 된다.
예시
Character.forDigit(k,10)