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

 

이번에 볼 문제는 백준 14649번 문제인 문홍안이다.
문제는 아래 링크를 확인하자.

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

 

14649번: 문홍안

대한 마을의 계곡에는 100개의 돌이 일렬로 놓인 징검다리가 있다. 원래 징검다리의 돌들은 평범한 돌이었지만 마을의 무속인 최손실 씨의 저주에 걸려 특별한 성질을 띠게 되었다. 그것은 바로

www.acmicpc.net

문제에서 주어지는 "징검다리 번호 / 방향"을 읽어 해당 비서가 바꾸게 되는 돌들의 색이 바뀐 횟수를 직접 1씩 더해주자. 이는 반복문을 이용해 구현할 수 있다.

 

이제 각 돌이 밟힌 횟수를 3으로 나눈 나머지를 이용해 문제의 답을 구해내자.

 

징검다리는 총 100개이므로 답은 항상 정확히 소수점 두자리까지 표현할 수 있다. (재산)*(특정 색의 징검다리 개수)를 100으로 나눈 몫으로 정수 부분을, 10으로 나눈 몫을 10으로 나눈 나머지를 출력해 소수점 첫째자리를, 10으로 나눈 나머지를 출력해 소수점 둘째자리를 출력하는 것으로 실수오차를 항상 피할 수 있다.

 

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

#include <iostream>
using namespace std;

int N, Q;
int arr[101];
int cnt[3];

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

	cin >> N >> Q;
	while (Q--) {
		int x; char c; cin >> x >> c;
		if (c == 'R') {
			x++;
			for (; x < 101; x++) arr[x]++;
		}
		else {
			x--;
			for (; x > 0; x--) arr[x]++;
		}
	}

	for (int i = 1; i < 101; i++) cnt[arr[i] % 3]++;
	for (int i = 0; i < 3; i++) {
		int x = N * cnt[i];
		cout << x / 100 << '.' << (x / 10) % 10 << x % 10 << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 2057 // C++] 팩토리얼 분해  (0) 2022.08.28
[BOJ 24855 // C++] Natives  (0) 2022.08.28
[BOJ 2553 // C++] 마지막 팩토리얼 수  (0) 2022.08.28
[BOJ 14645 // C++] 와이버스 부릉부릉  (0) 2022.08.28
[BOJ 6970 // C++] Sentences  (0) 2022.08.28

+ Recent posts