본문 바로가기

코딩테스트/Baekjoon

[JAVA] 백준 1075번: 나누기

< 문제 >

https://www.acmicpc.net/problem/1075

 

1075번: 나누기

첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다.

www.acmicpc.net

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

public class p1075 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.parseInt(br.readLine());
		int f=Integer.parseInt(br.readLine());
		int answer=0;
		
		n=n/100*100; //뒤의 두 자리를 00으로 바꿔줌
		while(true) {
			if(n%f==0) {
				answer=n%100;	
				break;
			}
			else
				n++;
		}
		if(answer<10) //한 자리이면 앞에 0 붙여서 출력 
			System.out.println("0"+answer); 
		else
			System.out.println(answer);			
	}

}

 

✏️ 풀이 방법

 

ex ) n=428392 , f =17인 경우

 

1. n / 100 * 100을 통해 n의 뒷자리 2개를 0으로 바꿔줌

428392 / 100 * 100 = 428300

 

2. n이 f로 나누어 떨어질 때까지 

n을 증가시키면서 반복문 돌기

428315 % 17 ==0 이므로  answer = 428315 % 100 =>15

 

3. 만약 answer이 한 자리 수라면, 앞에 0을 붙여서 출력하기 

 

✍🏻 느낀점

 

처음에 너무 어렵게 생각을 했다. 뒷 자리 2개를 0으로 바꿔야 된다는 생각에

String으로 접근을 하고, 계산이 필요한 부분에서는 int형으로 바꿔주고

계속 이런 형변환 작업을 하다보니 코드가 아주 지저분해졌다.

 

그리고 한 자리 수일 때, 앞에 0을 붙여주는 조건에서도

그저 출력 형식만 지켜주면 되는건데 

값 자체를 아예 바꿔줘야된다고 

복잡하게 생각했다. 

 

아직 문제 풀이 경험이 부족해서 이런 저런 실수도 하고

너무 어렵게 생각을 하는 것 같다. 

오늘 배운 점을 잊지 말고 다음부터는

똑같은 실수를 하지 않도록 해야겠다.