백준

[백준/BOJ] 1975번 : Number Game (JAVA / 자바)

코메인 2022. 1. 29. 19:11

안녕하세요~ 코딩하는 코알못 코메인입니다.

 

 

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

 

1975번: Number Game

창영이는 심심해서 혼자 재미 없는 게임을 하나 생각해냈다. 숫자 N을 먼저 정하고, 이 숫자를 2진법, 3진법, 4진법, ..., 100만진법, 100만 1진법 등등으로 바꾸어 보면서, 마지막자리에 연속된 0의

www.acmicpc.net


- 문제 -

 

난이도 브론즈 3 문제이다.

자바에서 입력방식은 scanner와 bufferedreader가 있다.

자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.

bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.

더 자세한 내용은 아래 글 참고 하면 좋다.

https://comain.tistory.com/3

 

(JAVA / 자바) Scanner 와 Bufferedreader

안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자

comain.tistory.com

 

풀이 방법

처음에 문제를 잘못이해해서 약수 구하는 문제인줄 알았다... 그런데 문제는 맨 뒤에 오는 0이기도 하고 그 0이 연속되면 다 새는거다. 예를들어 2의 10제곱은 0이 10개가 올 것이다. 그렇듯 다 일일히 진수계산을 하고 맨뒤에 0과 연속된 0을 다 세줘야한다. for문과 while문으로 계속 연산을 햇다. 해당 진수로 나눴을때 나머지가 0이 나오면 해당 수를 나누고 카운트를 1 추가해준다. 그리고 연산을 계속한다. 나머지가 0이 아닌 다른 수가 왔을땐 그 반복문을 끝낸다. 그럼 다음 지수를 나누기 시작할 것이고, 그걸 반복한다.

문제를 보면 100만 진수까지라고 했지만 그럴 필요가 없다. 어짜피 0이 나올 경우는 자기 자신의 숫자가 들어간 진수까지 일테니깐. 그리고 N이 1000까지 가능하다고 반복문을 1000까지 할 필요가 없다. 그냥 자기 자신까지만 하면 된다. 위 내용과 같은 말이다. 코드로 보자.


-풀이-

 

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

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		
		//0의 갯수를 셀 숫자의 갯수 T만큼 반복
		for(int i = 0; i < T; i++) {
			//0의 갯수를 저장할 변수
			int count = 0;
			int N = Integer.parseInt(br.readLine());
			//N의 진수들을 계산하는 거기에 N까지만 반복
			for(int j = 2; j <= N; j++) {
				//변해도 상관없는 변수에 N값을 저장
				int val = N;
				//해당 진수의 숫자마다 반복 횟수가 달라지기 때문에 무한 루프
				while(true) {
					//val을 j로 나눠서 나머지가 0이 아니면 무한루프 종료
					if(val % j != 0) {
						break;
					}
					count++;
					val /= j;
				}
			}
			System.out.println(count);
		}
	}
}

-결과-

 

 


아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠다.