🎠 기억하고 싶은 부분 🎠
1. 문자열에 특정 값이 포함되어 있는지 확인하기
문자열.contains("값") 결과는 true, false
2. int -> char 변환
toString( ) 사용
int를 string으로 변환해서 char값 가져오기Integer.toString(값).charAt(0) charAt으로 char 구하는 건데 인덱스를 0으로 넣고 풀어야되니까 값이 한자리 수일 떄만 좋게 사용할듯 수가 더 커지면 그냥 다른 방식사용하자
🎯 문제
1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.
<제한사항>
1 ≤ i < j ≤ 100,000
0 ≤ k ≤ 9
⛳ 과정
class Solution {
public int solution(int i, int j, int k) {
int answer = 0;
while(i<=j) {
if(String.valueOf(i).contains(String.valueOf(k))) {
for(int p=0; p<String.valueOf(i).length(); p++) {
if(String.valueOf(i).charAt(p)==Integer.toString(k).charAt(0)) {
// 숫자 같은거 있을때 마다 ++
answer++;
}
}
}
i++;
}
return answer;
}
}
🎲 답안
코테푸니까 수학시간 생각나..도대체 이런걸 왜 궁금해하는건가 싶어...
암튼 처음에는 i부터 j까지 모든 수를 배열에 넣어야되나 생각했는데 조건이 100,000까지라 크기가 너무 커질것 같아서 그냥문자열로 바꿔가지고 그 숫자를 포함하는지 확인하는 식으로 풀었다.
for문 돌리자니 그 100,000이 너무 걸렸어...상관없을 수도 있지만... 암튼 그래서 while문 돌렸다
i부터 j까지의 수로 구하는거니까 반복문 돌때마다 i++해줘서 j가 될때까지만 돌리는 거로 조건 설정했다.
그렇게해서 그냥 contains로 비교해줬는데 풀어보니까 11, 22 , 33 뭐 이런게 문제였다.
수가 똑같은게 2번 나오면 결과변수에 +2가 돼야되는데 한번만 수가 더해지는게 문제였어
그래서 똑같은 수를 포함한다는 if문 통과하면 그 숫자로 반복문을 다시 돌려가지고 charAt해서 한글자씩 쪼갠 다음에 다시 비교해서 결과변수 수를 올려줬다.
약간 이상하게 풀었나 싶긴한데 뭐 일단 만족이야