[백준 문제 풀이] 5086번 배수와 약수

Junu Kim·2025년 7월 12일
0
post-thumbnail

[5086] 배수와 약수

난이도: ★☆☆☆☆ • solved on: 2025-07-12


문제 요약

  • 문제 유형: 구현, 수학, 조건문
  • 요구사항: 두 자연수 a, b가 주어졌을 때
    • b가 a의 배수면 "multiple",
    • a가 b의 배수면 "factor",
    • 둘 다 아니면 "neither"
      를 출력한다.
    • "0 0" 입력이 들어오면 종료한다.

사용 개념

  1. 자료구조

    • int형 변수, 문자열 배열
  2. 알고리즘/기법

    • 조건문(if-else), 반복문(while), 나머지 연산(%)
  3. 핵심 키워드

    • 약수(factor), 배수(multiple)

풀이 아이디어

  1. 문제 분해
    • 무한 루프(while true)로 입력을 반복적으로 받음
    • 한 줄 입력을 split하여 두 수를 int로 변환
    • a==0 && b==0이면 루프 종료
    • a가 b의 배수면 "multiple" 출력
      b가 a의 배수면 "factor" 출력
      아니면 "neither" 출력
  2. 핵심 로직 흐름
    while (입력 반복) {
      if (a == 0 && b == 0) break;
      if (a % b == 0) "multiple"
      else if (b % a == 0) "factor"
      else "neither"
    }
  3. 예외 처리
    • 종료 조건(a==0 && b==0)만 명확히 확인

코드

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        while(true){
            String[] line = br.readLine().split(" ");
            int a = Integer.parseInt(line[0]);
            int b = Integer.parseInt(line[1]);
            if(a==0&&b==0){
                break;
            }
            if(a%b == 0){
                System.out.println("multiple");
            } else if(b%a == 0){
                System.out.println("factor");
            } else {
                System.out.println("neither");
            }
        }
    }
}

시간·공간 복잡도

  • 시간 복잡도: O(1) (입력 1회마다 상수 연산, 전체 O(N))
  • 공간 복잡도: O(1)

어려웠던 점

  • char to int와 String to int의 방식이 다른점을 놓쳤었다

배운 점 및 팁

  • split으로 받은 Stringint로 바꾸는 과정과, char형을 int로 변환하는 방법이 다름을 정확히 구분해야 한다.
int intFromString = Integer.parseInt(stringInput);
int intFromChar = (int) charInput;

참고 및 링크


추가 연습 문제

profile
생각이 현실이 될 수 있도록 노력하는 중입니다.

0개의 댓글