[프로그래머스] Java : 숫자 찾기(ASCII)
문제
정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
입출력 예
num | k | result |
29183 | 1 | 3 |
232443 | 4 | 4 |
123456 | 7 | -1 |
평소 코딩테스트 문제를 풀때 가능하면 ASCII를 안쓰고 풀었습니다.
그런데 이번 문제부터 ASCII를 적용시킬 수 있다면 풀어보려 합니다!
1. 형변환
2. for문으로 하나씩 비교(ASCII)
1. 형변환
String number = Integer.toString(num);
현재 입력받은 num이 int형입니다.
그런데 뒤에서 반복문으로 숫자 하나씩 비교하려면 String형태여야 합니다.
2. for문으로 하나씩 비교(ASCII)
for(int i=0; i<number.length(); i++){
if(number.charAt(i) == (char)(k+'0')){
answer = i+1;
break;
}
}
number의 원소가 k와 동일한지 비교해주는 단계입니다.
charAt() 메서드를 사용해주었습니다.
그럼 반환값이 char형태일겁니다.
그런데 k는 int형태입니다.
java는 다른 형끼리 비교가 불가능합니다.
그래서 k라는 정수를 문자로 만들어줘야합니다.
숫자를 문자로 만들기 위해선 ASCII코드를 사용하면 됩니다.
ASCII코드
'0' = 48
'1' = 49
'2' = 50
...
우리는 k라는 정수(ex. 3)를 문자형(ex. '3')으로 만들어야합니다.
그래서 k(ex. 3)에 '0'을 더하면 정수였던 k가 그대로 문자(ex. '3')로 바뀌게 됩니다.
'0'을 더해줌으로써 k 그 자체의 값에는 아무런 영향도 주지 않고 문자형태로 바꿔준 셈입니다.
코드
class Solution {
public int solution(int num, int k) {
int answer = -1;
String number = Integer.toString(num);
for(int i=0; i<number.length(); i++){
if(number.charAt(i) == (char)(k+'0')){
answer = i+1;
break;
}
}
return answer;
}
}
제가 작성한 코드는 아래에서 확인하실 수 있습니다.
https://github.com/eonwy/programmers
GitHub - eonwy/programmers: 🔎 coding-test (programmers) 🔍
🔎 coding-test (programmers) 🔍. Contribute to eonwy/programmers development by creating an account on GitHub.
github.com