[백준] 1주차(9/17~9/23)

OOING·2022년 9월 24일
0

#4673 셀프 넘버

분류: 수학, 구현, 부르트포스 알고리즘

#include <iostream>
using namespace std;
int sum[10000] = { 0, };

int main() {
	bool selfNum[10000];
	fill_n(selfNum, 10000, true);

	for (int n = 0; n<10000; ++n) {
		if (n >= 1000) {
			sum[n] = n / 1000 * 1000 + sum[n % 1000] + n / 1000;
			if (sum[n] >= 10000) continue;
			selfNum[sum[n]] = false;
		}
		else if (n >= 100) {
			sum[n] = n / 100 * 100 + sum[n % 100] + n / 100;
			selfNum[sum[n]] = false;
		}
		else if (n >= 10) {
			sum[n] = n / 10 * 10 + sum[n % 10] + n / 10;
			selfNum[sum[n]] = false;
		}
		else {
			sum[n] = n * 2;
			selfNum[sum[n]] = false;
		}
	}

	for (int i = 0; i < 10000; ++i)
		if (selfNum[i] == true) printf("%d\n", i);

	return 0;
}

#1978 소수 찾기

분류: 수학, 정수론, 소수판정, 에라토스테네스의 체

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

int main() {
	int n, num, count = 0;
	cin >> n;

	int i = 0;
	bool prime = true;
	for (int i = 0; i < n; ++i) {
		cin >> num;
		prime = true;
		if (num == 0 || num == 1) {
			prime = false;
			continue;
		}
		if (num == 2 || num == 3) ++count;
		else {
			for (int j = 2; j <= sqrt(num); ++j) {
				if (num % j == 0) {
					prime = false;
				}
			}
			if (prime) ++count;
			
		}
	}
	printf("%d", count);
	
	return 0;
}

#2941 크로아티아 알파벳

분류: 구현, 문자열

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

int main() {
	string alpha[8] = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };

	string voca;
	cin >> voca;

	int count = 0;
	int index;
	for (string s : alpha) {
		if (voca.empty()) break;
		index = voca.find(s);

		while(index >= 0) {
			++count;
			voca.replace(index, s.size(), " ");
			index = voca.find(s);
		}
	}
	voca.erase(remove(voca.begin(), voca.end(), ' '), voca.end());
	count += voca.size();
	printf("%d", count);
	return 0;
}

#1316 그룹 단어 체커

분류: 구현, 문자열

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool isGroup(string s) {
	vector<char> containedChar;
	char now;

	now = s[0];
	while(!s.empty()) {
		if (!containedChar.empty() && now == s[0]) {
			s.erase(s.begin());
			continue;
		}
		else if (find(containedChar.begin(), containedChar.end(), s[0]) != containedChar.end()) {
			return false;
		}
		containedChar.push_back(now);
		now = s[0];
		s.erase(s.begin());
	}
	return true;
}

int main() {
	int n, count = 0;
	cin >> n;

	string input;

	for (int i = 0; i < n; ++i) {
		cin >> input;
		if (isGroup(input)) ++count;
	}

	printf("%d", count);
	return 0;
}

목표는 코드 길이 줄이기, 더 간단히 접근하기

profile
HICE 19

0개의 댓글