728x90

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

 

1919번: 애너그램 만들기

두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs의 각 문자들의 순서를 잘 바꾸면 succor이 되기 때문이다. 한 편, dared와 bread는 서로 애너그램 관계에 있지 않다. 하지만 dared에서 맨 앞의 d를 제거하고, bread에서 제일 앞의 b를 제거하면, ared와 read라는 서

www.acmicpc.net

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

int main() {
	vector<int> firstWord(26);
	vector<int> secondWord(26);
	string s1, s2;
	cin >> s1 >> s2;
	for (int i = 0; i < s1.size(); i++) {
		firstWord[s1[i] - 'a']++;
	}
	for (int i = 0; i < s2.size(); i++) {
		secondWord[s2[i] - 'a']++;
	}
	int count = 0;
	for (int i = 0; i < 26; i++) {
		count += (abs(firstWord[i] - secondWord[i]));
	}
	cout << count;
	return 0;
}
728x90
728x90

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

 

7562번: 나이트의 이동

문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 입력 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. 체스판의 각 칸은 두 수의 쌍 {0, ...

www.acmicpc.net

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

int main() {
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	int testCase;
	cin >> testCase;
	for (int t = 0; t < testCase; t++) {
		int l;
		cin >> l;
		int nowRow, nowCol;
		int destRow, destCol;
		cin >> nowRow >> nowCol >> destRow >> destCol;
		int count;
		tuple<int, int, int> now = make_tuple(nowRow, nowCol, 0);
		queue<tuple<int, int, int>> q;
		vector<vector<bool>> visited(l, vector<bool>(l));
		q.push(now);
		while (!q.empty()) {
			tuple<int, int, int> cur = q.front();
			q.pop();
			if (!visited[get<0>(cur)][get<1>(cur)]) {
				visited[get<0>(cur)][get<1>(cur)] = true;
				if (get<0>(cur) == destRow && get<1>(cur) == destCol) {
					count = get<2>(cur);
					break;
				}
				if (get<0>(cur) - 2 >= 0 && get<1>(cur) - 1 >= 0 && !visited[get<0>(cur) - 2][get<1>(cur) - 1]) {
					q.push(make_tuple(get<0>(cur) - 2, get<1>(cur) - 1, get<2>(cur) + 1));
				}
				if (get<0>(cur) - 2 >= 0 && get<1>(cur) + 1 < l && !visited[get<0>(cur) - 2][get<1>(cur) + 1]) {
					q.push(make_tuple(get<0>(cur) - 2, get<1>(cur) + 1, get<2>(cur) + 1));
				}
				if (get<0>(cur) - 1 >= 0 && get<1>(cur) - 2 >= 0 && !visited[get<0>(cur) - 1][get<1>(cur) - 2]) {
					q.push(make_tuple(get<0>(cur) - 1, get<1>(cur) - 2, get<2>(cur) + 1));
				}
				if (get<0>(cur) - 1 >= 0 && get<1>(cur) + 2  < l && !visited[get<0>(cur) - 1][get<1>(cur) + 2]) {
					q.push(make_tuple(get<0>(cur) - 1, get<1>(cur) + 2, get<2>(cur) + 1));
				}
				if (get<0>(cur) + 1 < l && get<1>(cur) - 2 >= 0 && !visited[get<0>(cur) + 1][get<1>(cur) - 2]) {
					q.push(make_tuple(get<0>(cur) + 1, get<1>(cur) - 2, get<2>(cur) + 1));
				}
				if (get<0>(cur) + 1 < l && get<1>(cur) + 2 < l && !visited[get<0>(cur) + 1][get<1>(cur) + 2]) {
					q.push(make_tuple(get<0>(cur) + 1, get<1>(cur) + 2, get<2>(cur) + 1));
				}
				if (get<0>(cur) + 2 < l && get<1>(cur) - 1 >= 0 && !visited[get<0>(cur) + 2][get<1>(cur) - 1]) {
					q.push(make_tuple(get<0>(cur) + 2, get<1>(cur) - 1, get<2>(cur) + 1));
				}
				if (get<0>(cur) + 2 < l&& get<1>(cur) + 1 < l && !visited[get<0>(cur) + 2][get<1>(cur) + 1]) {
					q.push(make_tuple(get<0>(cur) + 2, get<1>(cur) + 1, get<2>(cur) + 1));
				}
			}
		}
		cout << count << '\n';
	}
	return 0;
}
728x90
728x90

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

 

1145번: 적어도 대부분의 배수

첫째 줄에 다섯 개의 자연수가 주어진다. 100보다 작거나 같은 자연수이고, 서로 다른 수이다.

www.acmicpc.net

#include <iostream>
using namespace std;

int main() {
	int numbers[5];
	int minNum = 100;
	for (int i = 0; i < 5; i++) {
		cin >> numbers[i];
		if (numbers[i] < minNum) minNum = numbers[i];
	}
	int n = minNum;
	while (true) {
		int count = 0;
		for (int i = 0; i < 5; i++) {
			if (n % numbers[i] == 0) count++;
		}
		if (count >= 3) break;
		n++;
	}
	cout << n;
	return 0;
}
728x90

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

[백준] 1919번 애너그램 만들기  (0) 2020.02.28
[백준] 7562번 나이트의 이동  (0) 2020.02.28
[백준] 2523번 별 찍기 - 13  (0) 2020.02.25
[백준] 2522번 별 찍기 - 12  (0) 2020.02.24
[백준] 3184번 양  (0) 2020.02.24
728x90

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

 

2523번: 별 찍기 - 13

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

#include <iostream>
using namespace std;

int main() {
	int n; 
	cin >> n;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j <= i; j++) cout << '*';
		cout << '\n';
	}
	for (int i = n - 1; i >= 0; i--) {
		for (int j = 0; j < i; j++) cout << '*';
		cout << '\n';
	}
	return 0;
}
728x90

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

[백준] 7562번 나이트의 이동  (0) 2020.02.28
[백준] 1145번 적어도 대부분의 배수  (0) 2020.02.25
[백준] 2522번 별 찍기 - 12  (0) 2020.02.24
[백준] 3184번 양  (0) 2020.02.24
[백준] 4246번 To and Fro  (0) 2020.02.24
728x90

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

 

2522번: 별 찍기 - 12

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

#include <iostream>
using namespace std;

int main() {
	int n; 
	cin >> n;
	for (int i = 1; i <= n; i++) {
		for (int j = n - i; j >= 1; j--) cout << ' ';
		for (int j = 1; j <= i; j++) cout << '*';
		cout << '\n';
	}
	for (int i = n - 1; i >= 1; i--) {
		for (int j = n - i; j >= 1; j--) cout << ' ';
		for (int j = 1; j <= i; j++) cout << '*';
		cout << '\n';
	}
	return 0;
}
728x90

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

[백준] 1145번 적어도 대부분의 배수  (0) 2020.02.25
[백준] 2523번 별 찍기 - 13  (0) 2020.02.25
[백준] 3184번 양  (0) 2020.02.24
[백준] 4246번 To and Fro  (0) 2020.02.24
[백준] 4101번 크냐?  (0) 2020.02.24
728x90

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

 

3184번: 양

문제 미키의 뒷마당에는 특정 수의 양이 있다. 그가 푹 잠든 사이에 배고픈 늑대는 마당에 들어와 양을 공격했다. 마당은 행과 열로 이루어진 직사각형 모양이다. 글자 '.' (점)은 빈 필드를 의미하며, 글자 '#'는 울타리를, 'o'는 양, 'v'는 늑대를 의미한다. 한 칸에서 수평, 수직만으로 이동하며 울타리를 지나지 않고 다른 칸으로 이동할 수 있다면, 두 칸은 같은 영역 안에 속해 있다고 한다. 마당에서 "탈출"할 수 있는 칸은 어떤 영역에도 속하지

www.acmicpc.net

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

int main() {
	cin.tie(NULL);
	int n, m;
	cin >> n >> m;
	vector<vector<char>> ground(n, vector<char>(m));
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> ground[i][j];
		}
	}
	int sheepCount = 0;
	int wolfCount = 0;
	vector<vector<bool>> visited(n, vector<bool>(m));
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (ground[i][j] != '#' && !visited[i][j]) {
				int sheep = 0;
				int wolf = 0;
				queue<pair<int, int>> q;
				q.push(make_pair(i, j));
				while (!q.empty()) {
					pair<int, int> cur = q.front();
					q.pop();
					if (!visited[cur.first][cur.second]) {
						if (ground[cur.first][cur.second] == 'o') sheep++;
						if (ground[cur.first][cur.second] == 'v') wolf++;
						visited[cur.first][cur.second] = true;
						if (cur.first + 1 < n && !visited[cur.first + 1][cur.second] && ground[cur.first + 1][cur.second] != '#') {
							q.push(make_pair(cur.first + 1, cur.second));
						}
						if (cur.first - 1 >= 0 && !visited[cur.first - 1][cur.second] && ground[cur.first - 1][cur.second] != '#') {
							q.push(make_pair(cur.first - 1, cur.second));
						}
						if (cur.second + 1 < m && !visited[cur.first][cur.second + 1] && ground[cur.first][cur.second + 1] != '#') {
							q.push(make_pair(cur.first, cur.second + 1));
						}
						if (cur.second - 1 >= 0 && !visited[cur.first][cur.second - 1] && ground[cur.first][cur.second - 1] != '#') {
							q.push(make_pair(cur.first, cur.second - 1));
						}
					}
				}
				if (sheep > wolf) {
					sheepCount += sheep;
				}
				else {
					wolfCount += wolf;
				}
			}
		}
	}
	cout << sheepCount << " " << wolfCount;
	return 0;
}
728x90

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

[백준] 2523번 별 찍기 - 13  (0) 2020.02.25
[백준] 2522번 별 찍기 - 12  (0) 2020.02.24
[백준] 4246번 To and Fro  (0) 2020.02.24
[백준] 4101번 크냐?  (0) 2020.02.24
[백준] 1388번 바닥 장식  (0) 2020.02.24
728x90

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

 

4246번: To and Fro

Mo and Larry have devised a way of encrypting messages. They first decide secretly on the number of columns and write the message (letters only) down the columns, padding with extra random letters so as to make a rectangular array of letters. For example,

www.acmicpc.net

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

int main() {
	while (true) {
		int n;
		cin >> n;
		if (n == 0) break;
		string s;
		cin >> s;
		vector<vector<char>> arr(s.size() / n, vector<char>(n));
		int index = 0;
		for (int i = 0; i < s.size() / n; i++) {
			if (i % 2 == 0) {
				for (int j = 0; j < n; j++) {
					arr[i][j] = s[index++];
				}
			}
			else {
				for (int j = n - 1; j >= 0; j--) {
					arr[i][j] = s[index++];
				}
			}
		}
		for (int j = 0; j < n; j++) {
			for (int i = 0; i < s.size() / n; i++) {
				cout << arr[i][j];
			}
		}
		cout << '\n';
	}
	return 0;
}
728x90

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

[백준] 2522번 별 찍기 - 12  (0) 2020.02.24
[백준] 3184번 양  (0) 2020.02.24
[백준] 4101번 크냐?  (0) 2020.02.24
[백준] 1388번 바닥 장식  (0) 2020.02.24
[백준] 1075번 나누기  (0) 2020.02.24
728x90

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

 

4101번: 크냐?

문제 두 양의 정수가 주어졌을 때, 첫 번째 수가 두 번째 수보다 큰지 구하는 프로그램을 작성하시오. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 잇으며, 두 정수가 주어진다. 두 숫자는 백만보다 작거나 같은 양의 정수이다. 입력의 마지막 줄에는 0이 두 개 주어진다. 출력 각 테스트 케이스마다, 첫 번째 수가 두 번째 수보다 크면 Yes를, 아니면 No를 한 줄에 하나씩 출력한다. 예제 입력 1 복사 1

www.acmicpc.net

#include <iostream>
using namespace std;

int main() {
	while (true) {
		int a, b;
		cin >> a >> b;
		if (a == 0 && b == 0) break;
		if (a > b) cout << "Yes" << '\n';
		else cout << "No" << '\n';
	}
	return 0;
}
728x90

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

[백준] 3184번 양  (0) 2020.02.24
[백준] 4246번 To and Fro  (0) 2020.02.24
[백준] 1388번 바닥 장식  (0) 2020.02.24
[백준] 1075번 나누기  (0) 2020.02.24
[백준] 1292번 쉽게 푸는 문제  (0) 2020.02.24
728x90

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

 

1388번: 바닥 장식

형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나무 판자는 크기 1의 너비를 가졌고, 양수의 길이를 가지고 있다. 기훈이 방은 직사각형 모양이고, 방 안에는 벽과 평행한 모양의 정사각형으로 나누어져 있다. 이제 ‘-’와 ‘|’로 이루어진 바닥 장식 모양이 주어진다. 만약 두 개의 ‘-’가 인접해 있고, 같은 행에 있다면

www.acmicpc.net

#include <iostream>
using namespace std;

int main() {
	int n, m;
	cin >> n >> m;
	vector<vector<char>> room(n, vector<char>(m));
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> room[i][j];
		}
	}
	int count = 0;
	for (int i = 0; i < n; i++) {
		char previous = '.';
		for (int j = 0; j < m; j++) {
			if (room[i][j] == '-') {
				if (room[i][j] != previous) count++;
			}
			previous = room[i][j];
		}
	}
	for (int j = 0; j < m; j++) {
		char previous = '.';
		for (int i = 0; i < n; i++) {
			if (room[i][j] == '|') {
				if (room[i][j] != previous) count++;
			}
			previous = room[i][j];
		}
	}
	cout << count;
	return 0;
}
728x90

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

[백준] 4246번 To and Fro  (0) 2020.02.24
[백준] 4101번 크냐?  (0) 2020.02.24
[백준] 1075번 나누기  (0) 2020.02.24
[백준] 1292번 쉽게 푸는 문제  (0) 2020.02.24
[백준] 수 정렬하기 3  (0) 2020.02.24
728x90

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

 

1075번: 나누기

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

www.acmicpc.net

#include <iostream>
using namespace std;

int main() {
	int n, f;
	cin >> n >> f;
	n = n / 100 * 100;
	for (int i = 0; i < 100; i++) {
		if ((n + i) % f == 0) {
			n = n + i;
			break;
		}
	}
	cout << n / 10 % 10 << n % 10;
	return 0;
}
728x90

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

[백준] 4101번 크냐?  (0) 2020.02.24
[백준] 1388번 바닥 장식  (0) 2020.02.24
[백준] 1292번 쉽게 푸는 문제  (0) 2020.02.24
[백준] 수 정렬하기 3  (0) 2020.02.24
[백준] 1927 최소 힙  (0) 2020.02.24

+ Recent posts