프로그래머스 저주의 숫자 3

KIMYEONGJUN·2026년 9월 25일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.
10진법	3x 마을에서 쓰는 숫자	10진법	3x 마을에서 쓰는 숫자
1	1	6	8
2	2	7	10
3	4	8	11
4	5	9	14
5	7	10	16
정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.

내가 이 문제를 보고 생각해본 부분

int answer = 0;은 3x 마을에서 실제로 사용할 숫자를 저장하고 1씩 증가시키기 위한 변수이다.
for (int i = 0; i < n; i++)는 입력받은 n번째 순서만큼 반복을 수행하기 위한 반복문이다.
answer++;는 반복이 돌 때마다 마을의 숫자를 일단 하나씩 뒤로 이동시킨다.
while (answer % 3 == 0 || String.valueOf(answer).contains("3"))은 현재 숫자가 3의 배수이거나 문자 '3'을 포함하고 있는지 검사하는 조건문이다.
저주의 숫자 조건에 해당되는 동안 answer++를 계속 실행하여 건너뛰게 만든다.
return answer;는 최종적으로 n번째에 해당하는 3x 마을의 숫자를 반환한다.

코드로 구현

class Solution {
    public int solution(int n) {
        int answer = 0; 
        for (int i = 0; i < n; i++) {
            answer++; 
            while (answer % 3 == 0 || String.valueOf(answer).contains("3")) {
                answer++;
            }
        }
        
        return answer;
    }
}

프로그래머스 코드

package programmers.programmers2;

// 프로그래머스 저주의 숫자 3
public class Main154 {
    public static void main(String[] args) {
        Main154 sol = new Main154();

        // 테스트 출력
        System.out.println(sol.solution(15)); // 결과: 25
        System.out.println(sol.solution(40)); // 결과: 76
    }

    public int solution(int n) {
        int answer = 0;
        for (int i = 0; i < n; i++) {
            answer++;
            while (answer % 3 == 0 || String.valueOf(answer).contains("3")) {
                answer++;
            }
        }

        return answer;
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글