관리 메뉴

100세까지 코딩

[프로그래머스] Lv0.저주의 숫자 3 본문

코딩테스트/자바

[프로그래머스] Lv0.저주의 숫자 3

100세까지 코딩 2023. 8. 27. 23:49
문제 설명

 

풀기 전 생각
  • 반복문을 사용하여 i = 1부터 n까지 반복하기
  • i가 +1 증가할 때마다 3x 마을에서 쓰는 숫자도 +1 해주기
  • 3x 마을에서 쓰는 숫자 +1 했는데도 3의 배수거나 3이 포함되면 또 +1 해주기
  • 포함여부는 3x 마을에서 쓰는 숫자를 String으로 바꾸고. contains() 메서드 사용 
class Solution {
    public int solution(int n) {
        int answer = 0;

        for(int i = 1 ; i <= n; i++){
            answer++;
            if(answer%3==0){
                answer++;
            }else if(String.valueOf(answer).contains("3")){
                answer++;
            }
            System.out.println(answer);
        }
        return answer;
    }
}
오류 및 개선
  • 10진수 9는 3x마을에서 14가 되어야 되는데 13이 나옴
  • 13을 contains에서 걸러지지가 않음
  • 그 이유는 9일때 if(answer%3==0)에서 걸려 13이 되는데 else if를 써서 밑에 조건에서 안 걸림
  • 또한, answer이 +1해도 계속 3의 배수이거나 3을 포함할 수 있음
최종
class Solution {
    public int solution(int n) {
        int answer = 0;

        for(int i = 1 ; i <= n; i++){   // 1부터 시작하여 n까지
            answer++;  // 3x 마을 숫자도 더해줌
            if(answer%3==0 || String.valueOf(answer).contains("3")){ // 3의 배수거나 3을 포함하면
                while(answer%3==0 || String.valueOf(answer).contains("3")==true){ // 3의 배수거나 3포함 안할때까지 +1
                    answer++;
                }
            }
        }
        return answer;
    }
}
모범 답안
class Solution {
    public int solution(int n) {
        int answer = 0;

        for (int i = 1; i <= n; i++) {
            answer++;
            if (answer % 3 == 0 || String.valueOf(answer).contains("3")) {
                i--;
            }
        }

        return answer;
    }
}
모범답안을 볼 때마다 경외감이..