[프로그래머스/C++ 문제 풀이] Lv. 0 - 유한 소수 판별하기

2024. 7. 5. 15:35·코딩테스트/프로그래머스 (Lv. 0)
728x90
반응형

문제 설명

소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.

  • 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.

두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.

제한 사항

  • a, b는 정수
  • 0 < a ≤ 1,000
  • 0 < b ≤ 1,000

입출력 예

a b result
7 20 1
11 22 1
12 21 2

 

입출력 예 #1

  • 분수 7/20은 기약분수 입니다. 분모 20의 소인수가 2, 5 이기 때문에 유한소수입니다. 따라서 1을 return합니다.

입출력 예 #2

  • 분수 11/22는 기약분수로 나타내면 1/2 입니다. 분모 2는 소인수가 2 뿐이기 때문에 유한소수 입니다. 따라서 1을 return합니다.

입출력 예 #3

  • 분수 12/21는 기약분수로 나타내면 4/7 입니다. 분모 7은 소인수가 7 이므로 무한소수입니다. 따라서 2를 return합니다.

문제 풀이

이번 문제는 a / b를 기약분수로 나타내고, b의 소인수가 2나 5로만 구성되어 있는지를 판별하여 유한소수인지를 체크하는 문제입니다.

 

저는 2가지 단계를 거쳐 문제를 해결하게 되었습니다.

  1. 기약분수 만들기 (최대 공약수를 찾아 분모에 나눠주기)
  2. 분모를 소인수분해하기 (2와 5이외의 다른 값으로 나눠지는지 체크하기)

문제의 전체적인 난이도도 쉽고, "유한 소수"에 대한 뜻만 알고 있으면 간단하게 풀 수 있는 문제라고 생각합니다.

정답 코드

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

using namespace std;

int solution(int a, int b) {
    int answer = 0;

    // 1. 기약분수 만들기

    // * 최대공약수 찾기
    int mxNum = 0;
    for (int i = 1; i <= (a < b? a : b); i++)
    {
        // 둘 다 나누어 떨어진다면 해당 숫자를 공약수로 저장
        if (a % i == 0 && b % i == 0)
        {
            mxNum = i;
        }
    }

    // * 찾은 최대 공약수를 분모(b)에 나눠주기
    b /= mxNum;

    // 2. 분모를 소인수 분해하기
    while (true)
    {
        // 2로 나누어 지는 경우 값 업데이트 하기
        if (b % 2 == 0)
        {
            b /= 2;
        }
        // 5로 나누어 지는 경우 값 업데이트 하기
        else if (b % 5 == 0)
        {
            b /= 5;
        }
        // 둘 다 안 나눠지는 경우 종료
        else
        {
            break;
        }
    }

    // 3. 결과 출력하기
    if (b == 1)
        answer = 1;
    else
        answer = 2;

    return answer;
}
728x90
반응형
저작자표시 비영리 변경금지

'코딩테스트 > 프로그래머스 (Lv. 0)' 카테고리의 다른 글

[프로그래머스/C++ 문제 풀이] Lv. 0 - 치킨 쿠폰  (0) 2024.07.05
[프로그래머스/C++ 문제 풀이] Lv. 0 - 등수 매기기  (0) 2024.07.05
[프로그래머스/C++ 문제 풀이] Lv. 0 - 저주의 숫자 3  (0) 2024.07.03
[프로그래머스/C++ 문제 풀이] Lv. 0 - 특이한 정렬  (0) 2024.07.02
[프로그래머스/C++ 문제 풀이] Lv. 0 - [PCCE 기출문제] 6번 / 가채점  (0) 2024.07.02
'코딩테스트/프로그래머스 (Lv. 0)' 카테고리의 다른 글
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 치킨 쿠폰
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 등수 매기기
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 저주의 숫자 3
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 특이한 정렬
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Unreal Engine
    c#
    Algorithm
    fruitspuzzle
    tsoftobjectptr
    ai controller
    project t.a develop
    delegate
    fsoftobjectpath
    구현
    unrealengine
    dataasset
    Summer/Winter Coding
    CS지식
    프로젝트
    코딩테스트
    2022 kakao
    백준
    2018 kakao
    2019 kakao
    pcce 기출문제
    unity
    sesac
    timelessadventure
    프로그래머스
    C++
    후기
    프로세스
    issac3d
    청년취업사관학교
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[프로그래머스/C++ 문제 풀이] Lv. 0 - 유한 소수 판별하기
상단으로

티스토리툴바