728x90

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

 

2475번: 검증수

컴퓨터를 제조하는 회사인 KOI 전자에서는 제조하는 컴퓨터마다 6자리의 고유번호를 매긴다. 고유번호의 처음 5자리에는 00000부터 99999까지의 수 중 하나가 주어지며 6번째 자리에는 검증수가 들어간다. 검증수는 고유번호의 처음 5자리에 들어가는 5개의 숫자를 각각 제곱한 수의 합을 10으로 나눈 나머지이다. 예를 들어 고유번호의 처음 5자리의 숫자들이 04256이면, 각 숫자를 제곱한 수들의 합 0+16+4+25+36 = 81 을 10으로 나눈 나머

www.acmicpc.net

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


int main() {
	int v[5];
	for (int i = 0; i < 5; i++) {
		cin >> v[i];
	}
	int total = 0;
	for (int i = 0; i < 5; i++) {
		total += pow(v[i], 2);
	}
	cout << total % 10;
	return 0;
}
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 11055번 가장 큰 증가 부분 수열  (0) 2020.02.29
[백준] 15969번 행복  (0) 2020.02.29
[백준] 15657번 N과 M (8)  (0) 2020.02.29
[백준] 1934번 최소공배수  (0) 2020.02.29
[백준] 5598번 카이사르 암호  (0) 2020.02.29
728x90

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

 

15657번: N과 M (8)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 고른 수열은 비내림차순이어야 한다. 길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.

www.acmicpc.net

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

int n, k;
vector<int> v;

void select(vector<int> result, int num) {
	if (num == k) {
		for (int i = 0; i < k; i++) {
			cout << result[i] << " ";
		}
		cout << '\n';
		return;
	}
	for (int i = 0; i < n; i++) {
		if (num == 0) {
			result[num] = v[i];
			select(result, num + 1);
		}
		else {
			if (result[num - 1] <= v[i]) {
				result[num] = v[i];
				select(result, num + 1);
			}
		}
	}
}


int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n >> k;
	v = vector<int>(n);
	for (int i = 0; i < n; i++) cin >> v[i];
	sort(v.begin(), v.end());
	select(vector<int>(k), 0);
	return 0;
}
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 15969번 행복  (0) 2020.02.29
[백준] 2475번 검증수  (0) 2020.02.29
[백준] 1934번 최소공배수  (0) 2020.02.29
[백준] 5598번 카이사르 암호  (0) 2020.02.29
[백준] 2609번 최대공약수와 최소공배수  (0) 2020.02.29
728x90

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

 

1934번: 최소공배수

두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있으며, 최소 공배수는 30이다. 두 자연수 A와 B가 주어졌을 때, A와 B의 최소공배수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

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


int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int testCase;
	cin >> testCase;
	for (int i = 0; i < testCase; i++) {
		int a, b;
		cin >> a >> b;
		int lcm;
		for (int i = 1; ; i++) {
			if (i * max(a, b) % a == 0 && i * max(a, b) % b == 0) {
				lcm = i * max(a, b);
				break;
			}
		}
		cout << lcm << '\n';
	}
	return 0;
}
728x90
728x90

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

 

5598번: 카이사르 암호

문제 가이우스 율리우스 카이사르(Gaius Julius Caesar)는 고대 로마 군인이자 정치가였습니다. 카이사르는 비밀스럽게 편지를 쓸 때, 'A'를 'D로', 'B'를 'E'로, 'C'를 'F'로... 이런 식으로 알파벳 문자를 3개씩 건너뛰어 적었다고 합니다. 26개의 대문자 알파벳으로 이루어진 단어를 카이사르 암호 형식으로 3문자를 옮겨 겹치지 않게 나열하여 얻은 카이사르 단어가 있습니다. 이 카이사르 단어를 원래 단어로 돌려놓는 프로그램을 작성

www.acmicpc.net

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


int main() {
	string s;
	cin >> s;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] >= 'D') cout << (char)(s[i] - 3);
		else cout << (char)(s[i] + 23);
	}
	return 0;
}
728x90
728x90

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

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를,둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

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


int main() {
	int a, b;
	cin >> a >> b;
	int gcd, lcm;
	for (int i = min(a, b); i > 0; i--) {
		if (a % i == 0 && b % i == 0) {
			gcd = i;
			break;
		}
	}
	for (int i = max(a, b); ; i++) {
		if (i % a == 0 && i % b == 0) {
			lcm = i;
			break;
		}
	}
	cout << gcd << endl;
	cout << lcm << endl;
	return 0;
}
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1934번 최소공배수  (0) 2020.02.29
[백준] 5598번 카이사르 암호  (0) 2020.02.29
[백준] 11048번 이동하기  (0) 2020.02.29
[백준] 9506번 약수들의 합  (0) 2020.02.28
[백준] 2529번 부등호  (0) 2020.02.28
728x90

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

 

11048번: 이동하기

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 현재 (1, 1)에 있고, (N, M)으로 이동하려고 한다. 준규가 (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동할 수 있고, 각 방을 방문할 때마다 방에 놓여져있는 사탕을 모두 가져갈 수 있다. 또, 미로 밖으

www.acmicpc.net

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


int main() {
	cin.tie(NULL);
	int n, m;
	cin >> n >> m;
	vector<vector<int>> maze(n, vector<int>(m));
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> maze[i][j];
		}
	}
	vector<vector<int>> candy(n, vector<int>(m));
	candy[0][0] = maze[0][0];
	for (int i = 1; i < m; i++) {
		candy[0][i] = candy[0][i - 1] + maze[0][i];
	}
	for (int i = 1; i < n; i++) {
		candy[i][0] = candy[i - 1][0] + maze[i][0];
	}
	for (int i = 1; i < n; i++) {
		for (int j = 1; j < m; j++) {
			candy[i][j] = max(candy[i - 1][j], candy[i][j - 1]) + maze[i][j];
		}
	}
	cout << candy[n - 1][m - 1];
	return 0;
}
728x90
728x90

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

 

9506번: 약수들의 합

문제 어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.  예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라. 입력 입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100, 000) 입력의 마지막엔 -1이 주어진다. 출력 테스트케이스 마다 한줄에 하나씩 출력해야 한다. n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다

www.acmicpc.net

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


int main() {
	while (true) {
		set<int> s;
		int n;
		cin >> n;
		if (n == -1) break;
		for (int i = 1; i <= sqrt(n); i++) {
			if (n % i == 0) {
				if(n / i != n) 
					s.insert(n / i);
				s.insert(i);
			}
		}
		int total = 0;
		for (set<int>::iterator iter = s.begin(); iter != s.end(); iter++) {
			total += (*iter);
		}
		int count = 0;
		if (total == n) {
			cout << n << " = ";
			for (set<int>::iterator iter = s.begin(); iter != s.end(); iter++) {
				cout << (*iter);
				if (count < s.size() - 1) {
					cout << " + ";
				}
				count++;
			}
			cout << '\n';
		}
		else {
			cout << n << " is NOT perfect.\n";
		}
	}
	return 0;
}
728x90
728x90

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

 

2529번: 부등호

여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력에 답은 항상 존재하며 출력 정수는 하나의 문자열이 되도록 해야 한다. 

www.acmicpc.net

순열로 0부터 9까지 나열하는 모든 경우를 다 구해보고 부등호에 맞는 식인지를 나중에 확인하는 방식으로 풀었다.

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

vector<string> v;
vector<char> sign;
int k;

void permutation(vector<int> result, vector<bool> visited, int n, int num) {
	if (n == num) {
		for (int i = 0; i < k; i++) {
			if (sign[i] == '<') {
				if (result[i] > result[i + 1]) return;
			}
			else {
				if (result[i] < result[i + 1]) return;
			}
		}
		string s = "";
		for (int i = 0; i < n; i++) {
			s += (result[i] + '0');
		}

		v.push_back(s);
		return;
	}
	for (int i = 0; i < 10; i++) {
		if (!visited[i]) {
			visited[i] = true;
			result[num] = i;
			permutation(result, visited, n, num + 1);
			visited[i] = false;
		}
	}
}

int main() {
	cin >> k;
	sign = vector<char>(k);
	for (int i = 0; i < k; i++) {
		cin >> sign[i];
	}
	permutation(vector<int>(k + 1), vector<bool>(10), k + 1, 0);
	cout << v[v.size() - 1] << '\n';
	cout << v[0];
	return 0;
}
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 11048번 이동하기  (0) 2020.02.29
[백준] 9506번 약수들의 합  (0) 2020.02.28
[백준] 1138번 한 줄로 서기  (0) 2020.02.28
[백준] 4504번 배수 찾기  (0) 2020.02.28
[백준] 1919번 애너그램 만들기  (0) 2020.02.28
728x90

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

 

1138번: 한 줄로 서기

첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다.

www.acmicpc.net

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

int main() {
	int n;
	cin >> n;
	vector<int> numOfPeople(n);
	for (int i = 1; i <= n; i++) {
		int temp;
		cin >> temp;
		int count = 0;
		for (int j = 0; j < n; j++) {
			if (temp == count && numOfPeople[j] == 0) {
				numOfPeople[j] = i;
				break;
			}
			if (numOfPeople[j] == 0) count++;
		}
	}
	for (int i = 0; i < n; i++) {
		cout << numOfPeople[i] << " ";
	}
	return 0;
}
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 9506번 약수들의 합  (0) 2020.02.28
[백준] 2529번 부등호  (0) 2020.02.28
[백준] 4504번 배수 찾기  (0) 2020.02.28
[백준] 1919번 애너그램 만들기  (0) 2020.02.28
[백준] 7562번 나이트의 이동  (0) 2020.02.28
728x90

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

 

4504번: 배수 찾기

문제 정수 n(0 < n < 1000)과 수의 목록이 주어졌을 때, 목록에 들어있는 수가 n의 배수인지 아닌지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n이 주어진다. 다음 줄부터 한 줄에 한 개씩 목록에 들어있는 수가 주어진다. 이 수는 0보다 크고, 10,000보다 작다. 목록은 0으로 끝난다. 출력 목록에 있는 수가 n의 배수인지 아닌지를 구한 뒤 예제 출력처럼 출력한다. 예제 입력 1 복사 3 1 7 99 321 777 0 예제 출력 1 복

www.acmicpc.net

#include <iostream>
using namespace std;

int main() {
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	int n; 
	cin >> n;
	while (true) {
		int i;
		cin >> i;
		if (i == 0) break;
		if (i % n == 0) cout << i << " is a multiple of " << n << ".\n";
		else cout << i << " is NOT a multiple of " << n << ".\n";
	}
	return 0;
}
728x90

+ Recent posts