LeeTaes 공부노트

[프로그래머스/C++ 문제 풀이] Lv. 0 - 저주의 숫자 3 본문

코딩테스트/프로그래머스 (Lv. 0)

[프로그래머스/C++ 문제 풀이] Lv. 0 - 저주의 숫자 3

리태s 2024. 7. 3. 12:43
728x90
반응형

문제 설명

3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.

10진법 3x 마을에서 쓰는 숫자 10진법 3x 마을에서 쓰는 숫자
2 2 7 10
3 4 8 11
4 5 9 14
5 7 10 16
1 1 6 8

 

정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.

제한 사항

  • 1 ≤ n ≤ 10,000
  • 1 ≤ numlist의 원소 ≤ 10,000
  • 1 ≤ numlist의 길이 ≤ 100
  • numlist는 중복된 원소를 갖지 않습니다.

입출력 예

n result
15 25
40 76

 

입출력 예 #1

  • 15를 3x 마을의 숫자로 변환하면 25입니다.

입출력 예 #2

  • 40을 3x 마을의 숫자로 변환하면 76입니다.

문제 풀이

저는 이번 문제의 핵심이 해당 숫자에 3이 포함되어 있는지, 그리고 3의 배수인지를 체크하는 부분이라고 생각합니다.

 

저의 경우 1부터 n까지의 수를 순회하며 3x마을에서 사용하는 숫자를 증가시켰으며, 만약 증가된 숫자가 3의 배수거나 3이 포함된 수라면 포함되지 않을 때까지 증가시키는 방식으로 문제를 해결하였습니다.

정답 코드

더보기
#include <string>
#include <vector>

using namespace std;

bool Check(int num)
{
    // 전달받은 숫자를 문자열로 변환
    string numStr = to_string(num);

    // 문자 '3'이 문자열에 포함되어 있는지 체크
    if (numStr.find('3') != string::npos)
    {
        return true;
    }
    else
    {
        return false;
    }
}

int solution(int n) {
    int answer = 0;
    
    for (int i = 1; i <= n; i++)
    {
        // answer 값 증가
        answer++;
        
        // 만약 answer이 3의 배수거나 3이 들어간 수라면?
        while (answer % 3 == 0 || Check(answer))
        {
            answer++;
        }
    }
    
    return answer;
}

 

728x90
반응형