관리 메뉴

great minds think alike

[C] 프로그래머스 스쿨_1주차 과제 문제: 공배수 본문

SWLUG/프로그래머스 스쿨 (C)

[C] 프로그래머스 스쿨_1주차 과제 문제: 공배수

gapsoo 2024. 3. 23. 15:16

 


[1] 문제

 

문제 설명

정수 number와 n, m이 주어집니다. number가 n의 배수이면서 m의 배수이면 1을 아니라면 0을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 10 ≤ number ≤ 100
  • 2 ≤ n, m < 10

 

입출력 예

number n m result
60 2 3 1
55 10 5 0

 

 

 

입출력 예 설명

 

입출력 예 #1

  • 60은 2의 배수이면서 3의 배수이기 때문에 1을 return합니다.

 

입출력 예 #2

  • 55는 5의 배수이지만 10의 배수가 아니기 때문에 0을 return합니다.

 

 


[2] 정답 & 해석

 

 

(1) 오답

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int number, int n, int m) {
    int answer = 0;
    
    if (number%(n*m)==0){
        answer=1;
    }
    
    else {
        answer=0;
    }
    
    return answer;
}

 

틀린 이유: n이 m의 배수이거나 m이 n의 배수인 경우를 고려하지 않아서 오답

 

 

 

 

(2) 정답

 

#include <stdio.h>
#include <stdbool.h>

int solution(int number, int n, int m) {
    if (n % m == 0 || m % n == 0) { // n이 m의 배수거나 m이 n의 배수인 경우
        if (number % n == 0) // number가 n의 배수인 경우
            return 1;
    } else { // 서로소인 경우
        if (number % (n * m) == 0) // number가 n과 m의 최소공배수의 배수인 경우
            return 1;
    }
    return 0;
}

 

 

(3) 해석

 

if (n % m == 0 || m % n == 0) 조건에서는 n이 m의 배수이거나 m이 n의 배수인 경우를 확인한다.

만약 n이 m의 배수이면서 동시에 number가 n의 배수인 경우, 1을 반환한다.

 

위 조건에 걸리지 않는 경우, 즉 n과 m이 서로소인 경우에는 number가 n과 m의 최소공배수의 배수인지 확인한다.

number가 n과 m의 최소공배수의 배수인 경우, 1을 반환한다.


위 두 조건에 모두 해당하지 않으면, 즉 number가 n의 배수이면서 m의 배수도 아니고, n과 m이 서로소일 때, 0을 반환한다.

 

 

 


[3] 느낀 점

 

 

모든 조건을 세분화하지말고, 필요한 최소한의 조건문을 만들고, 나머지 경우는 0을 반환하게 하는 것도 좋은 방법인 것 같다.