[백준]5086 - 배수와 약수/StringBuilder,if{break;}

goyoung·2024년 1월 8일
0

[백준]코딩테스트

목록 보기
3/6

| 문제
4 × 3 = 12이다.

이 식을 통해 다음과 같은 사실을 알 수 있다.

3은 12의 약수이고, 12는 3의 배수이다.

4도 12의 약수이고, 12는 4의 배수이다.

두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.

  1. 첫 번째 숫자가 두 번째 숫자의 약수이다.
  2. 첫 번째 숫자가 두 번째 숫자의 배수이다.
  3. 첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니다.

| 입력
입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 10,000이 넘지않는 두 자연수로 이루어져 있다. 마지막 줄에는 0이 2개 주어진다. 두 수가 같은 경우는 없다.

| 출력
각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.

package Study;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class A5086_study {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		
		//출력형식에 맞게 출력하기 위해 String을 가변적으로 사용할 수 있는 StringBuilder에
		//출력값들을 추가했다가 마지막에 sb.toString으로 출력
		StringBuilder sb=new StringBuilder(); 
		
		//break는 loop문이나 switch문 외부에선 사용할 수 없어서 조건이 참일 때의 while 루프를 써준다.
		while(true) {
	
		try {
			StringTokenizer st=new StringTokenizer(bf.readLine());
						
			int first_su=Integer.parseInt(st.nextToken());
			int second_su=Integer.parseInt(st.nextToken());
			
			if(first_su==0 && second_su==0) {
				break; //break는 loop or switch문 밖에서 사용할 수 없다.
			}
			
			if(second_su%first_su==0) {
				sb.append("factor\n");
			}else if(first_su%second_su==0) {
				sb.append("multiple\n");
			}else {
				sb.append("neither\n");
			}
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		}
		System.out.println(sb.toString()); //StringBuilder에 저장해놓은 값 출력

	}

}

| 느낀점
문자열 String 형태를 가변적으로 조정했다가 출력할 수 있는 StringBuilder에 대해 알 수 있어서 좋았다. StringBuilder vs StringBuffer vs String의 차이점에 대해 알아보도록하자!
(String VS StringBuilder VS StringBuffer : 링크텍스트)
그리고 오랜만에 자바 하니까 break에 대한 조건도 잊고 있었는데 break는 loop문이나 switch문 밖에선 쓸 수 없다는 점 잊지말자!

0개의 댓글