-
728x90
문제 설명
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; char val = (char)(k+'0'); for(int m=i; m<=j; m++){ for(int n=0; n<String.valueOf(m).length(); n++) { if(String.valueOf(m).charAt(n)==val){ answer++; } } } return answer; } }
i부터 j까지의 숫자에서 k가 몇 번 들어가는지 확인해야 하는 문제로 문자열로 비교를 해봤다.
k를
char
타입으로 변환 후 바깥 for문은 i부터 j까지 돌고 안쪽 for문은 m의 길이만큼 돌면서 문자k
포함 횟수를 체크한다.이 방법 말고도 다양한 방법들이 있었는데 그중에 문자열 이어붙이는 로직이 특이해서 다시 풀어봤다.
class Solution { public int solution(int i, int j, int k) { int answer = 0; String str = ""; for(int m=i; m<=j; m++) { str+=""+m; } return str.length() - str.replace(""+k,"").length(); } }
마찬가지로 i부터 j까지 for문을 돌면서
str
변수에 모든 수를 이어붙인다. 그리고 이어 붙인 전체 문자열의 길이에서 k를 모두 공백으로 바꾼 문자열의 길이를 빼서 리턴한다.돌려보니 모든 숫자를 문자열로 이어 붙여서 그런지 속도가 느리긴 했지만 완전 발상의 전환!
참고
String.valueOf(A)
: A를 String 타입으로 변환문자열.charAt(인덱스)
: 문자열에서 해당하는 인덱스의 한글자를 떼서 char 타입으로 리턴문자열.replace(A,B)
: A문자를 B문자로 모두 변경
728x90'algorithm' 카테고리의 다른 글
자바 알고리즘 - 이진수 더하기 (0) 2023.09.06 자바 알고리즘 - A로 B 만들기 (0) 2023.09.06 자바 알고리즘 - 중복된 문자 제거 (0) 2023.09.05 자바 알고리즘 - 삼각형의 완성조건(1) (0) 2023.09.05 자바 알고리즘 - 가까운 수 (0) 2023.09.05 - 1 ≤