문제

 

 

풀이

 특정 집단에서 k번째 인원을 아무도 남지 않을 때까지 반복해서 제거하고 이 제거되는 순서대로 해당 인원의 번호를 출력하면 된다. 이 문제는 큐를 통해 쉽게 해결할 수 있다.

#include <iostream>
#include <queue>

using namespace std;

int main() {
	int n, k;
	queue<int> q;

	cin >> n >> k;

	for (int i = 1; i <= n; i++)
		q.push(i);

	cout << "<";

	while (q.size() > 0) {
		for (int i = 0; i < k - 1; i++) {
			q.push(q.front());
			q.pop();
		}

		if (q.size() > 1) cout << q.front() << ", ";
		else cout << q.front() << ">";
		q.pop();
	}

	return 0;
}

'백준 > 기타' 카테고리의 다른 글

2164번: 카드2 [C++]  (0) 2023.04.10
1920번: 수 찾기 [C++]  (0) 2023.04.10
7568번: 덩치 [C++]  (0) 2023.04.06
11050번: 이항 계수 1 [C++]  (0) 2023.04.06
2775번: 부녀회장이 될테야 [C++]  (0) 2023.04.06

문제

 

 

풀이

키와 몸무게를 한 쌍으로 배열에 받은 뒤, 각 인원별로 키와 몸무게 둘 다 해당 인원보다 큰 사람의 수를 세면 된다.

#include <iostream>
#include <vector>

using namespace std;

int main() {
	int n;
	vector<pair<int, int>> v;

	cin >> n;

	for (int i = 0; i < n; i++) {
		int weight, height;

		cin >> weight >> height;
		v.push_back({ weight, height });
	}

	for (int i = 0; i < n; i++) {
		int cnt = 0;

		for (int j = 0; j < n; j++) {
			if (i == j) cnt++;
			if ((v[i].first < v[j].first) && (v[i].second < v[j].second)) cnt++;
		}

		cout << cnt << " ";
	}

	return 0;
}

문제

 

 

풀이

#include <iostream>

using namespace std;

int facto(int n) {
	if (n == 0 || n == 1) return 1;
	return n * facto(n - 1);
}

int main() {
	int n, k;

	cin >> n >> k;

	cout << facto(n) / (facto(k) * facto(n - k));

	return 0;
}

'백준 > 기타' 카테고리의 다른 글

11866번: 요세푸스 문제 0 [C++]  (0) 2023.04.06
7568번: 덩치 [C++]  (0) 2023.04.06
2775번: 부녀회장이 될테야 [C++]  (0) 2023.04.06
2609번: 최대공약수와 최소공배수 [C++]  (0) 2023.04.06
1259번: 팰린드롬수 [C++]  (0) 2023.04.06

문제

 

 

풀이

주어진 조건대로 풀이하면 된다.

#include <iostream>

using namespace std;

int main() {
	int x, y, z;
	int date = 1;

	cin >> x >> y >> z;

	date += (z - x) / (x - y);
	
	if ((z - x) % (x - y) != 0) date++;

	if (x >= z) cout << 1;
	else cout << date;

	return 0;
}

'백준 > 기하' 카테고리의 다른 글

2292번: 벌집 [C++]  (0) 2023.04.06
14215: 세 막대 / C++  (0) 2023.03.21
5073: 삼각형과 세 변 / C++  (0) 2023.03.21
10101: 삼각형 외우기 / C++  (0) 2023.03.21
9063: 대지 / C++  (0) 2023.03.21

문제

 

 

풀이

k층의 n호에는 k층 n-1호에 사는 사람 수와 k-1층 n호에 사는 사람 수를 더한 만큼 살고 있다.

#include <iostream>

using namespace std;

int func(int k, int n) {
	if (n == 1) return 1;
	if (k == 0) return n;

	return (func(k, n - 1) + func(k - 1, n));
}

int main() {	
	int t, k, n;

	cin >> t;

	for (int i = 0; i < t; i++) {
		cin >> k >> n;
		
		cout << func(k, n) << "\n";
	}

	return 0;
}

'백준 > 기타' 카테고리의 다른 글

7568번: 덩치 [C++]  (0) 2023.04.06
11050번: 이항 계수 1 [C++]  (0) 2023.04.06
2609번: 최대공약수와 최소공배수 [C++]  (0) 2023.04.06
1259번: 팰린드롬수 [C++]  (0) 2023.04.06
15829번: Hashing [C++]  (0) 2023.04.06

문제

 

 

풀이

유클리드 호제법을 사용해 최대 공약수와 최소 공배수를 구하였다.

#include <iostream>

using namespace std;

int gcd(int a, int b) {
	if (a % b == 0) return b;
	else return gcd(b, a % b);
}

int main() {
	int n, m;
	int gt, lt;

	cin >> n >> m;

	if (n >= m) {
		gt = n;
		lt = m;
	}
	else {
		gt = m;
		lt = n;
	}

	cout << gcd(gt, lt) << "\n" << (n * m) / gcd(gt, lt);

	return 0;
}

'백준 > 기타' 카테고리의 다른 글

11050번: 이항 계수 1 [C++]  (0) 2023.04.06
2775번: 부녀회장이 될테야 [C++]  (0) 2023.04.06
1259번: 팰린드롬수 [C++]  (0) 2023.04.06
15829번: Hashing [C++]  (0) 2023.04.06
4153번: 직각삼각형 [C++]  (0) 2023.04.06

문제

 

 

풀이

문자열을 뒤집어서 뒤집기 전 문자열과 동일한지 판별하면 된다.

#include <iostream>

using namespace std;

int main() {
	string s1, s2;

	while (true) {
		cin >> s1;

		if (s1 == "0") break;

		for (int i = 0; i < s1.length(); i++)
			s2 += s1[s1.length() - i - 1];

		if (s1 == s2) cout << "yes\n";
		else cout << "no\n";

		s2.clear();
	}

	return 0;
}

문제

 

 

풀이

 주어진 식대로 계산하면 된다.

#include <iostream>
#include <string>

using namespace std;

int main() {
	int n;
	long long hash = 0, r = 1, m = 1234567891;
	string str;

	cin >> n >> str;

	for (int i = 0; i < str.length(); i++) {
		hash = (hash + (str[i] - 'a' + 1) * r) % m;

		r = (r *31) % m;
	}

	cout << hash;

	return 0;
}

문제

 

 

풀이

 n이 위치한 육각형이 중앙으로부터 몇 번째 육각형인지를 구하면 된다.

 각 육각형의 마지막 수는 각각 1, 7, 19, 37, 61로 증가값이 6의 배수로 증가함을 알 수 있고 이를 통해 n에 도달하려면 최소 몇 번 이동해야하는지 알 수 있다.

#include <iostream>

using namespace std;

int main() {	
	int n;
	int cnt = 0, sum = 0;

	cin >> n;

	for (int i = 0; sum < n; i++) {
		if (i == 0) sum += 1;
		else sum += 6 * i;

		cnt++;
	}

	cout << cnt;

	return 0;
}

 

'백준 > 기하' 카테고리의 다른 글

2869번: 달팽이는 올라가고 싶다 [C++]  (0) 2023.04.06
14215: 세 막대 / C++  (0) 2023.03.21
5073: 삼각형과 세 변 / C++  (0) 2023.03.21
10101: 삼각형 외우기 / C++  (0) 2023.03.21
9063: 대지 / C++  (0) 2023.03.21

문제

 

 

풀이

 엘리베이터를 타고 이동하는 거리는 고려하지 않고 가까운 방을 선호하고, 거리가 같은 경우에는 아래층을 선호하므로 각 층의 1호실이 아래부터 먼저 채워지고 다음 호실로 넘어갈 것이다.

 그렇기에 호텔의 높이가 h고, n번째 손님일 때 배정되는 호실은 아래와 같다.

  • n이 h로 나누어 떨어지면 배정되는 호실은 ((h * 100) + (n / h))호
  • 나누어 떨어지지 않는다면 ((n % h) * 100 + (n / h) + 1)호
#include <iostream>

using namespace std;

int main() {	
	int t, height, width, n;
	int result = 0;
	cin >> t;

	for (int i = 0; i < t; i++) {
		cin >> height >> width >> n;

		if (n % height == 0) result = height * 100 + (n / height);
		else result = (n % height) * 100 + (n / height) + 1;

		cout << result << "\n";
	}

	return 0;
}

+ Recent posts