본문 바로가기

알고리즘 · 코딩

[SWEA 7854] 최약수

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWttVkiq5jEDFASy 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


C++ 풀이

#include <iostream>
#include <string>
using namespace std;

//자릿수 계산
int cal_numSize(int N) {
	int count = 1;
	while (N >= 10) {
		N /= 10;
		count++;
	}
	return count;
}

//수의 앞 세자리 구하기
int divide_until_1000(int N) {
	while (N >= 1000)
		N /= 10;
	return N;
}

/*
1, 2, 5
10, 20, 25, 50
100, 125, 200, 250, 500
이 이후로는 뒤에 0만 더 붙이면 된다

1000, 1250, 2000, 2500, 5000
10000, 12500, 20000, 25000, 50000
. . .
*/
int main() {
	int T;
	cin >> T;
	for (int i = 0; i < T; i++) {
		int N, num_count;
		cin >> N;
		if (N < 2)
			num_count = 1;
		else if (N < 5)
			num_count = 2;
		else if (N < 10)
			num_count = 3;
		else if (N < 20)
			num_count = 4;
		else if (N < 25)
			num_count = 5;
		else if (N < 50)
			num_count = 6;
		else if (N < 100)
			num_count = 7;
		else {
			num_count = 8 + ((cal_numSize(N) - 3) * 5);

			int front_num = divide_until_1000(N);

			if (front_num >= 500)
				num_count += 4;
			else if (front_num >= 250)
				num_count += 3;
			else if (front_num >= 200)
				num_count += 2;
			else if (front_num >= 125)
				num_count += 1;
		}
		cout << "#" << i + 1 << " " << num_count << endl;
	}
	return 0;
}

최약수 구하는 규칙에 맞춰서 풀었다.

 

세자리 이상 수부터는 앞 세자리가 100, 125, 200, 250, 500이고 뒤 자리는 다 0이어야지만 최약수가 된다.

 

 

 

 

반응형