문제
https://school.programmers.co.kr/learn/courses/30/lessons/120912
풀이
array 배열의 i 값을 먼저 String으로 만든다.
그리고 char[] 배열에 문자로 나누어 저장하고, for문을 이용하여 char[]배열의 값이 7이 있다면 answer 값을 더하는 형식으로 풀었다.
코드
class Solution {
public int solution(int[] array) {
int answer = 0;
for(int i=0; i<array.length; i++){
String ar = array[i]+"";
char[] arr = ar.toCharArray();
for(int j=0; j<arr.length; j++){
if(arr[j]=='7'){
answer++;
}
}
}
return answer;
}
}
+++++
다른사람 풀이 - 1 ) 몫과 나머지 활용
class Solution {
public int solution(int[] array) {
int answer = 0;
for(int a : array){
while(a != 0){
if(a % 10 == 7){
answer++;
}
a /= 10;
}
}
return answer;
}
}
풀이)
10으로 나눈 나머지가 7이 나오면 answer 값을 더하도록 했다.
그리고 a의 수를 다시 10으로 나눈 몫을 a가 0이 될때까지 반복한다. 이렇게되면 일의자리 숫자와 십의 자리 숫자를 모두 7인지 확인할 수 있다.
다른사람 풀이 - 2 ) Stream 사용
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] array) {
return (int) Arrays.stream(
Arrays.stream(array)
.mapToObj(String::valueOf)
.collect(Collectors.joining())
.split("")
)
.filter(s -> s.equals("7"))
.count();
}
}
풀이)
Arrays.stream(array) : 배열을 IntStream으로 변환
mapToObj(String::valueOf) : 각 정수를 문자열로 변환
collect(Collectors.joining()) : 문자열을 하나로 합침
split("") : 문자열을 각 문자로 분리
위의 네개의 작업이 끝나면 가장 위의 Arryas.stream() 가 문자열 배열을 Stream<String>으로 변환한다.
fliter(s -> s.equals("7")) : 각 문자들 중 "7"인 것만 필터링
count() : 7이 몇 번 등장하는지 세고, 그 값을 가장 위에 써있는 (int)에 의해 강제형변환하여 반환한다.
'하루하루 > 프로그래머스 문제풀이' 카테고리의 다른 글
[Lv.0 - Java] 120883. 로그인 성공? (0) | 2023.12.25 |
---|---|
[Lv.0 - Java] 120842. 2차원으로 만들기 (2) | 2023.12.22 |
[Lv.0 - Java] 120886. A로 B 만들기 (0) | 2023.12.18 |
[Lv.0 - Java] 120904. 숫자 찾기 (0) | 2023.12.15 |
[Lv.0 - Java] 120897. 약수 구하기 (0) | 2023.12.15 |