※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 10804번 문제인 카드 역배치이다.
문제는 아래 링크를 확인하자.

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

 

10804번: 카드 역배치

1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다. 

www.acmicpc.net

swap과 반복문을 이용하면 문제에서 요구하는 것을 그대로 시뮬레이션할 수 있다.

 

아래는 제출한 소스코드이다.

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

int arr[21];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	for (int i = 1; i <= 20; i++) {
		arr[i] = i;
	}

	int T = 10;
	while (T--) {
		int L, R; cin >> L >> R;
		while (L < R) {
			swap(arr[L++], arr[R--]);
		}
	}

	for (int i = 1; i <= 20; i++) {
		cout << arr[i] << ' ';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 5576 // C++] 콘테스트  (0) 2021.06.01
[BOJ 1001 // C++] A-B  (0) 2021.06.01
[BOJ 10984 // C++] 내 학점을 구해줘  (0) 2021.06.01
[BOJ 10834 // C++] 벨트  (0) 2021.06.01
[BOJ 1173 // C++] 운동  (0) 2021.06.01

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1173번 문제인 운동이다.
문제는 아래 링크를 확인하자.

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

 

10984번: 내 학점을 구해줘

게으른 근우는 열심히 놀다가 문득, 자신의 학점 평균이 얼마일지 궁금해졌다. 학사시스템도 들어가기 귀찮아하는 근우를 위해 구해주도록 하자. 

www.acmicpc.net

이 문제에서는 각 수강과목의 학점과 성적이 주어질 때 총 학점과 평점을 구하는 문제이다.

여기에서 평점은 각 과목의 (학점*성적)의 총합을 (학점)의 총합으로 나누어 구할 수 있다.

 

이 문제에서, 예제는 정확히 소수점 한자리까지 출력을 하였지만 (널널한) 오차범위 내의 출력도 답으로 인정해주므로 double형으로 그냥 계산하고 제출해도 된다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int T; cin >> T;
	while (T--) {
		int N; cin >> N;
		int credit = 0; double grade = 0;
		while (N--) {
			int C; double G; cin >> C >> G;
			credit += C; grade += C * G;
		}
		cout << credit << ' ' << grade / credit << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1001 // C++] A-B  (0) 2021.06.01
[BOJ 10804 // C++] 카드 역배치  (0) 2021.06.01
[BOJ 10834 // C++] 벨트  (0) 2021.06.01
[BOJ 1173 // C++] 운동  (0) 2021.06.01
[BOJ 2744 // C++] 대소문자 바꾸기  (0) 2021.06.01

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 10834번 문제인 벨트이다.
문제는 아래 링크를 확인하자.

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

 

10834번: 벨트

첫 줄에는 벨트의 개수를 나타내는 자연수 M(1 ≤ M ≤ 1,000)이 주어진다. 다음 M개의 줄에는 1번 벨트부터 순서대로 벨트로 이어진 두 바퀴의 회전수의 비를 나타내는 두 개의 양의 정수 a, b와 벨

www.acmicpc.net

일반적인 조건 하에서는 분수를 이용해야겠지만, 주어진 조건을 잘 보면 이 문제는 단순한 곱셈과 나눗셈만으로 해결이 가능하다는 것을 알 수 있을 것이다.

 

특히, 입력 조건의 마지막 두 문장을 주의깊게 읽어보자.

 

단, 바퀴의 분당 회전수를 32비트 정수형으로 저장하는 경우 오버플로우가 일어나지 않게 나눌 수를 먼저 나누고 곱할 수를 곱하는 것이 바람직하다. (또는 64비트 정수형을 이용할 수도 있다.)

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int ans = 1;
	int rot = 0;

	int N; cin >> N;
	while (N--) {
		int x, y, r; cin >> x >> y >> r;
		ans /= x;
		ans *= y;
		rot ^= r;
	}

	cout << rot << ' ' << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 10804 // C++] 카드 역배치  (0) 2021.06.01
[BOJ 10984 // C++] 내 학점을 구해줘  (0) 2021.06.01
[BOJ 1173 // C++] 운동  (0) 2021.06.01
[BOJ 2744 // C++] 대소문자 바꾸기  (0) 2021.06.01
[BOJ 1357 // C++] 뒤집힌 덧셈  (0) 2021.06.01

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1173번 문제인 운동이다.
문제는 아래 링크를 확인하자.

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

 

1173번: 운동

첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다.

www.acmicpc.net

문제에 주어진 대로 시뮬레이션을 돌리면 문제를 풀 수 있다.

 

운동을 한번도 할 수 없는 경우를 제외하면 운동을 완료할 수 있으니, 운동을 마칠 수 없는 경우는 맨 처음 한번만 확인하면 된다는 점을 확인하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N, m, M, T, R; cin >> N >> m >> M >> T >> R;
	int cnt = 0;
	int timespent = 0;
	int beat = m;
	if (beat + T > M) { // 운동 불가
		cout << -1;
		return 0;
	}
	while (cnt < N) { // 운동 가능: 시뮬레이션
		timespent++;
		if (beat + T <= M) {
			beat += T;
			cnt++;
		}
		else {
			if (beat - R >= m) beat -= R;
			else beat = m;
		}
	}
	cout << timespent;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 10984 // C++] 내 학점을 구해줘  (0) 2021.06.01
[BOJ 10834 // C++] 벨트  (0) 2021.06.01
[BOJ 2744 // C++] 대소문자 바꾸기  (0) 2021.06.01
[BOJ 1357 // C++] 뒤집힌 덧셈  (0) 2021.06.01
[BOJ 9076 // C++] 점수 집계  (0) 2021.06.01

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 2744번 문제인 대소문자 바꾸기이다.
문제는 아래 링크를 확인하자.

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

 

2744번: 대소문자 바꾸기

영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오.

www.acmicpc.net

isupper, islower을 이용하면 주어진 문자의 대소문자 여부를 확인할 수 있고, toupper, tolower을 이용하면 주어진 문자를 대문자/소문자로 바꿔줄 수 있다.

 

아래는 제출한 소스코드이다.

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

int arr[5];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int d = 'A' - 'a';

	string s; cin >> s;
	for (auto letter : s) {
		if (isupper(letter)) cout << char(tolower(letter));
		else cout << char(toupper(letter));
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 10834 // C++] 벨트  (0) 2021.06.01
[BOJ 1173 // C++] 운동  (0) 2021.06.01
[BOJ 1357 // C++] 뒤집힌 덧셈  (0) 2021.06.01
[BOJ 9076 // C++] 점수 집계  (0) 2021.06.01
[BOJ 9295 // C++] 주사위  (0) 2021.06.01

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1357번 문제인 뒤집힌 덧셈이다.
문제는 아래 링크를 확인하자.

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

 

1357번: 뒤집힌 덧셈

어떤 수 X가 주어졌을 때, X의 모든 자리수가 역순이 된 수를 얻을 수 있다. Rev(X)를 X의 모든 자리수를 역순으로 만드는 함수라고 하자. 예를 들어, X=123일 때, Rev(X) = 321이다. 그리고, X=100일 때, Rev(

www.acmicpc.net

reverse 함수를 이용하면 문자열을 간단히 뒤집을 수 있다.

 

뒤집어서 합을 구한 다음 다시 뒤집은 "문자열"은 0으로 시작할 수 있다는 점을 신경쓰자.

 

아래는 제출한 소스코드이다.

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

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	string n1, n2; cin >> n1 >> n2;
	reverse(n1.begin(), n1.end());
	reverse(n2.begin(), n2.end());
	string ans = to_string(stoi(n1) + stoi(n2));
	reverse(ans.begin(), ans.end());
	cout << stoi(ans);
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1173 // C++] 운동  (0) 2021.06.01
[BOJ 2744 // C++] 대소문자 바꾸기  (0) 2021.06.01
[BOJ 9076 // C++] 점수 집계  (0) 2021.06.01
[BOJ 9295 // C++] 주사위  (0) 2021.06.01
[BOJ 10995 // C++] 별 찍기 - 20  (0) 2021.06.01

+ Recent posts