문제
내가 작성한 정답
작성한 정답1
class Solution {
public int solution(int i, int j, int k){
int answer = 0;
for(int a = i; a <= j; a++){
char[] a1 = String.valueOf(a).toCharArray();
for(char c: a1){
if(c==(char)(k+48)) answer++;
}
}
return answer;
}
}
내가 작성한 오답 - streamAPI
: 예를 들어 k=1 이고 i와 j 사이에 11이라는 숫자가 포함되어 있다면 11은 2번 카운트 돼야하는데 1번만 카운트 된다.
import java.util.stream.IntStream;
class Solution {
public int solution(int i, int j, int k) {
int answer = 0;
return (int) IntStream.rangeClosed(i,j)
.mapToObj(String::valueOf)
.filter(a->a.contains(String.valueOf(k)))
.count();
}
}
내가 작성한 정답2 - streamAPI
: 위에서 String으로 만든 int를 char로 쪼개서 하나씩 포함되는지 확인한다.
import java.util.stream.IntStream;
class Solution {
public int solution(int i, int j, int k) {
return (int) IntStream.rangeClosed(i,j)
.mapToObj(String::valueOf)
.mapToLong(a->a.chars()
.filter(b->b == (String.valueOf(k)).charAt(0)).count())
.sum();
}
}
다른 사람들의 정답
class Solution {
public int solution(int i, int j, int k) {
String str = "";
// i부터 j까지 다 연결한 문자열로 만듦
for(int a = i; a <= j; a++) {
// a+"" : a를 문자열로 변환! 하여 str에 추가한다.
str += a+"";
}
// k+"" -> k를 문자열로 변환
// 전체 길이에서 k를 공백으로 치환시켜서 구한 길이를 뺀다
return str.length() - str.replace(k+"", "").length();
}
}
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
class Solution {
public int solution(int i, int j, int k) {
return (int) Arrays.stream(IntStream.rangeClosed(i, j)
.mapToObj(String::valueOf)
// 각 문자열을 문자로 나눔
.flatMap(String::lines)
// 모든 문자열 하나의 문자열로 변환
.collect(Collectors.joining())
// 쪼개서 배열로 변환
.split(""))
.filter(s -> s.equals(String.valueOf(k)))
.count();
}
}
Share article