새소식

Programmers Coding Test/Java

[프로그래머스 120891] Java - 코딩테스트 입문 / 369게임

  • -

 

 

369게임

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

1)  문제

머쓱이는 친구들과 369게임을 하고 있습니다. 
369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 
머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.
제한사항
1 ≤ order ≤ 1,000,000

 

 

 

2)  예시

 

 

Result Table
order result
3 1
29423 2

 

 

 

입출력 예 #1
3은 3이 1개 있으므로 1을 출력합니다.


입출력 예 #2
29423은 3이 1개, 9가 1개 있으므로 2를 출력합니다.

 

 

 

 

 

3)  풀이

 

 

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

● class Solution {

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

 

 

 

 

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

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

●    public int solution(int order) {

 

 

 

 

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

●    if(1> order || order > 1_000_000){
            throw new IllegalArgumentException("order는 1 이상 1000000이하입니다.");
        }



 

4. 정답이 될 정수 변수 answer를 생성하고 초기화합니다.

정수 order를 문자열로 형변환하여 tsn (three six nine을 줄였습니다 하하)에 저장합니다.

●    int answer = 0;
      String tsn = Integer.toString(order);

 

 

 

 

 

5. for반복문을 통해 tsn 문자 하나하나 확인하여, 3으로 나눈 나머지가 0이라면 3,6,9에 해당하므로

answer의 값을 1씩 증가시킵니다.

여기서 처음에 답안을 제출했다가 틀렸습니다.

이유를 고민하다보니 c가 0이 되는 경우에도 3으로 나눈 나머지가 0으로 처리되어버리기 때문에 계산값이 달라지게 됩니다. 따라서 0보다 큰 경우로 조건을 추가하여 0이 되지 않도록 하였습니다.

●    for(int i = 0; i < tsn.length(); i++){
            char c = tsn.charAt(i);
            if(Character.getNumericValue(c) % 3 == 0 && Character.getNumericValue(c) > 0){
                answer ++;
            }
        }
        return answer;
    }
}

 

 

 

 

 

 

 

 

 

 

4)  코드

 

class Solution {
    public int solution(int order) {
        if(1> order || order > 1_000_000){
            throw new IllegalArgumentException("order는 1 이상 1000000이하입니다.");
        }

        int answer = 0;
        String tsn = Integer.toString(order);
        
        for(int i = 0; i < tsn.length(); i++){
            char c = tsn.charAt(i);
            if(Character.getNumericValue(c) % 3 == 0 && Character.getNumericValue(c) > 0){
                answer ++;
            }
        }
        return answer;
    }
}

 

 

 

 

 

 

 

5)  느낀점

Character클래스의 getNumericValue 메소드를 알게 된 이후로 정말 유용하게 사용하고 있다고 생각합니다.

또한 첫 답안 제출 이후, 분명히 코드는 맞는 것 같은데 오답처리가 되어 다시 한번 생각해보았습니다.

바로 !!! c가 0일 때가 있다는 사실.

그것을 조건문으로 제한을 걸어주니 바로 정답 ㅠㅠㅠ

 

어떤 사람은 그냥 if 조건에 c==3 || c== 6 || c==9 식으로 그냥 나열해서 확인하였는데, 이게 더 좋은 방법인 것 같습니다.

그럼 0에 대한 처리도 해줄 필요가 없고, 3,6,9 게임이니 딱 가독성도 좋을 것 같구...

배워갑니다.

 

 

 

 

 

 

 

 

 

 

 

Contents

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

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