새소식

Programmers Coding Test/Java

[프로그래머스 120912] Java - 코딩테스트 입문 / 7의 개수

  • -

 

7의 개수

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120912

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

1)  문제

머쓱이는 행운의 숫자 7을 가장 좋아합니다.
정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지
return 하도록 solution 함수를 완성해보세요.
제한사항
1 ≤ array의 길이 ≤ 100
0 ≤ array의 원소 ≤ 100,000

 

 

 

2)  예시

 

 

Result Table
array result
[7, 77, 17] 4
[10, 29] 0

 

 

 

입출력 예 #1
[7, 77, 17]에는 7이 4개 있으므로 4를 return 합니다.


입출력 예 #2
[10, 29]에는 7이 없으므로 0을 return 합니다.

 

 

 

 

3)  풀이

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 정수배열 array를 매개변수로 하는 solution 메소드를 선언합니다.

solution은 정수를 반환하므로 데이터타입을 int으로 합니다.

●  public int solution(int[] array) {

 

 

 

3. 정답인 정수 answer를 생성하고 초기화해줍니다.

●     int answer = 0;
        

 

 

4. 제한사항을 확인하고, 만족하지 않는다면 예외처리합니다.

●   if(array.length < 1 || array.length > 100){
            throw new IllegalArgumentException("제한사항을 확인하세요");
        }
        

 

 

 

 

5. 우선 배열 array의 i번째 요소를 검사합니다.

그리고 그 요소를 String.valueOf 메소드를 이용해 문자열로 형변환한 이후,

문자의 한글자씩을 다시 순회하며 검사하여 '7'을 포함하고있는지 확인하고,

포함하고있다면 answer의 값을 1 증가시켜줍니다.

 

최종적으로 결과값 answer를 반환합니다.

●   for(int i=0; i < array.length; i++){
            String str = String.valueOf(array[i]);
            for(int j=0; j < str.length(); j++){
                if(str.charAt(j) == '7'){
                    answer +=1;
                }
            }
        }
        
        return answer;
    }
}

 

 

 

4)  코드

 

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        
        if(array.length < 1 || array.length > 100){
            throw new IllegalArgumentException("제한사항을 확인하세요");
        }
        
        for(int i=0; i < array.length; i++){
            String str = String.valueOf(array[i]);
            for(int j=0; j < str.length(); j++){
                if(str.charAt(j) == '7'){
                    answer +=1;
                }
            }
        }
        
        return answer;
    }
}

 

 

 

 

 

 

 

5)  느낀점

처음에 예시를 보지않고 문제를 풀었다가,

자릿수를 생각하지 않고 문제를 풀었다가 77과 같은 수에 대응하지 못해 오답에 해당하는 문제를 찾게되었습니다.

 

그리고, str.charAt(j) == '7' 이부분도 '7'이 아니라 그냥 7로 했다가 오답이 발생하여 고민의 시간을 거쳤습니다.

분명 맞다고 생각했는데 자꾸 오류가 나니...ㅠㅠ

(그냥 7을 할경우 숫자리터럴과의 비교를 하게되서 해당하는 값이 없다고 나오고, '7'은 문자리터럴과 비교를 하게되서 문자형변환하여 검사한 올바른 값이 나오게 됩니다.)

 

아래는 다른 사람이 해결한 코드인데 이것도 좋다고 생각합니다.

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;
    }
}

이 코드는 array를 순환하며 그 원소값을 10으로 나눈 나머지가 7이라면,

answer에 1을 더해주며, 그 원소값을 10으로 나눠주고, 0이 될때까지 반복합니다.

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.