
https://school.programmers.co.kr/learn/courses/30/lessons/120887
문제를 풀던 도중에 간과한 사실이 있었다. 숫자에서 k 숫자가 1개 이상 포함될 수 있다는 사실이다. 단순히 포함 여부만 따지면 테스트 케이스를 통과할 수 없다.
이 코드는 정수 k를 문자(char)로 변환하는 트릭이다.
'0'은 문자지만 내부적으로는 아스키 코드 값 48을 가진다.
예를 들면 k=3일 때 k+ '0' = 3 + 48 = 51 -> (char) 51 = '3'이다.
내가 왜 gpt의 도움을 받아서 이렇게 했냐면
st.charAt(h)의 결과 타입은 char인데 k는 int이기 때문이다.
여기서는 값을 형변환해서 직접 사용하는 것이 아니라 두 값이 일치하는 가 여부를 보는 것이기 때문에 정수인 k를 char로 형변환해서 비교했다.
class Solution {
public int solution(int i, int j, int k) {
int answer = 0;
for (int t = i; t <=j; t++) {
String st = Integer.toString(t);
String sk = Integer.toString(k);
if(st.contains(sk)) { // 11 같은 케이스는 += 2여야 함.
for(int h= 0; h < st.length(); h++) {
if(st.charAt(h) == (char)(k + '0')) {
answer++;
}
}
}
}
return answer;
}
}