[프로그래머스/C++] 유한소수 판별하기

2024. 2. 4. 00:24·[ Computer Science ]/Algorithm_C++

0. 문제

풀이한 문제 - 유한소수 판별하기 (프로그래머스 입문 / Lv . 0 / 73%)

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

 

프로그래머스

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

programmers.co.kr

 

1. 테스트 케이스 분석

테스트 케이스를 분석하면 다음과 같다

문제에는 표 상단의 세 개만 제시되어 있었지만

문제 풀이 시 고려해야하는 예외 사항들을 추가해서 풀었다

 

일단 기약분수가 아닌 기약분수로 만들어야 

분모에 2 또는 5만 있는지 확인할 수 있기 때문에

기약분수로 만들기 위해 필요한 GCD (최대공약수)부터 구했다

 

당연한 이야기지만 혹시 놓쳤을 사람들을 위해

테스트 케이스를 분석한 위 사진을 확인해보면

기약분수는 GCD = 1 임을 알 수 있다

 

2. 코드 및 풀이

GCD는 분수의 분자와 분모를 모두 나누었을 때 나누어 떨어지는 수이다

 

i가 1일 때부터 분자와 분모 중 작은 수가 될 때까지 반복하여

GCD를 찾는데 이때 조건에 만족하는 더 큰 값을 찾으면 갱신되는 구조다

 

GCD 를 찾은 후에는

입력 받은 a, b를 GCD로 나눠서

기약분수로 만든다

 

GCD가 1인 경우는 굳이 의미 없으니 제외했다

 

여기까지 너무 순조로웠다

기약분수의 분모가 2 또는 5만 존재하면

유한소수로 나타낼 수 있기 때문에

분모가 2 또는 5로 나누어 떨어지는 조건만

확인하면 된다고 생각했기 때문이다

 

b % 2 == 0 || b % 5 == 0 의 조건을 입력하면

분모에 2 또는 5가 있기만 하면 참의 값을 출력하므로

 

위의 테스트 케이스처럼 3이나 7을 포함하더라도

참으로 계산된다

 

따라서 분모에 2 또는 5가 아닌 숫자가 있는 경우를

필터링 해줘야 한다

 

여러 가지 방법이 있겠지만

나는 분모를 계속 나누는 방식을 채택했다

 

분모가 2 또는 5로 나누었을 때

나누어 떨어지는 경우는 나눠서 b를 새 값으로 갱신했고

나누어 떨어지지 않는 경우가 되면 탈출하도록 했다

 

반복문은 b가 1이 되거나

2 또는 5의 배수가 아닌 수가 되면 탈출하게 되므로

 

탈출할 때 최종 갱신된 b값이

1이면 유한소수가 가능하므로 1을 리턴하고

1이 아니면 2 또는 5가 아닌 수가 분모에 포함된 것이므로

2를 리턴하도록 했다

 

 

해당 게시글에 사용된 PPT 이미지는

모두 직접 제작했습니다

728x90

'[ Computer Science ] > Algorithm_C++' 카테고리의 다른 글

[백준/C++/Greedy] 11047 동전 0  (0) 2024.08.19
[백준/C++/Graph] 16928 뱀과 사다리 게임  (0) 2024.07.28
[백준/C++/DP] 1463 1로 만들기  (0) 2024.06.28
[프로그래머스/C++] 주사위 게임 3  (0) 2024.02.04
[프로그래머스/C++] 연속된 수의 합  (0) 2024.02.04
[프로그래머스/C++] 최빈값 구하기  (0) 2024.02.04
[프로그래머스/C++] 저주의 숫자 3  (0) 2024.02.04
'[ Computer Science ]/Algorithm_C++' 카테고리의 다른 글
  • [프로그래머스/C++] 주사위 게임 3
  • [프로그래머스/C++] 연속된 수의 합
  • [프로그래머스/C++] 최빈값 구하기
  • [프로그래머스/C++] 저주의 숫자 3
dev charlotte
dev charlotte
주 - 컴퓨터공학 / 복수 - 산업 보안
    250x250
  • dev charlotte
    int main() {
    dev charlotte
  • 전체
    오늘
    어제
    • 분류 전체보기
      • [ Laboratory ]
        • Paper review
        • Advanced Operating System
        • System Software & Storage
        • Lab etc
      • [ Computer Science ]
        • Algorithm_C++
        • Operating System
        • Information Retrieval
        • Database_sql
        • SW Engineering
        • Computer Network
        • JavaScript
        • Python
        • Data Structure
        • CS study
        • Distributed systems
      • [ Computer Security ]
        • Convergence Security
        • Web Security
        • PIMS
        • Network Security
        • Digital Finance
      • [ Artificial Intelligence ]
        • Trend
        • Seminar
      • [ 미래, 같이, LG ]
      • [ Development ]
        • [ Front-end ]
        • [ Back-end ] Spring 기본
        • [ Back-end ] Node.js
      • etc
        • 현대오토에버 스마트 모빌리티 공학 체험 교육
      • It's me
  • 블로그 메뉴

    • 링크

      • GitHub
    • 공지사항

    • 인기 글

    • 태그

      소프트웨어 공학
      현대오토에버 스마트모빌리티
      프로그래머스
      SQL 쿼리
      자바스크립트
      spdk
      코딩 인강
      싸피
      비전공자 코딩
      싸피 13기
      오블완
      데이터베이스
      공대생 대외활동
      백준
      스마트모빌리티공학체험교육
      코드잇
      프로그래머스 입문
      프로그래밍 언어론
      코딩 교육
      ssafy 13기
      현대오토에버
      MySQL
      프로그래머스 코테
      hotstorage
      티스토리챌린지
      SSAFY
      SQL
      프로그래머스 c++
      대학생 대외활동
      현대오토에버 스마트 모빌리티
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    dev charlotte
    [프로그래머스/C++] 유한소수 판별하기
    상단으로

    티스토리툴바