본문 바로가기
하루하루/프로그래머스 문제풀이

[Lv.0 - Java] 120912. 7의 개수

by 키튼햄 2023. 12. 19.

 

문제

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)에 의해 강제형변환하여 반환한다.