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

 

이번에 볼 문제는 백준 4614번 문제인 Linear Pachinko이다.
문제는 아래 링크를 확인하자.

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

 

각 문자에 공이 떨어졌을 때 어떤 확률로 밑으로 떨어질지는 각 공의 움직임을 지문에 주어진 대로 시뮬레이션하는 것으로 알아낼 수 있다. 이 과정에서 주어진 문자열의 맨 왼쪽과 맨 오른쪽에 '.'을 하나씩 추가하고 그 사이의 문자들 각각에서 시뮬레이션을 시도하면 구현을 더 편하게 할 수 있다.

 

각 문자에 공이 떨어질 확률은 균등하므로 위에서 계산한 각 확률을 이용해 문제의 답을 구하자.

 

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

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

int N, val;
string s;

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

	cin >> s;
	while (s != "#") {
		N = s.length(), val = 0;
		s = "." + s + ".";
		for (int i = 1; i <= N; i++) {
			if (s[i] == '.') val += 2;
			else if (s[i] == '/') {
				int ii = i - 1;
				while (s[ii] == '_') ii--;
				if (s[ii] == '.') val += 2;
			}
			else if (s[i] == '\\') {
				int ii = i + 1;
				while (s[ii] == '_') ii++;
				if (s[ii] == '.') val += 2;
			}
			else if (s[i] == '|') {
				int ii;
				ii = i - 1;
				while (s[ii] == '_') ii--;
				if (s[ii] == '.') val++;
				ii = i + 1;
				while (s[ii] == '_') ii++;
				if (s[ii] == '.') val++;
			}
		}

		cout << val * 100 / (N * 2) << '\n';
		cin >> s;
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 19583 // C++] 싸이버개강총회  (0) 2024.04.30
[BOJ 18004 // C++] From A to B  (0) 2024.04.29
[BOJ 28858 // C++] Пасьянс  (0) 2024.04.27
[BOJ 11811 // C++] 데스스타  (1) 2024.04.26
[BOJ 4626 // C++] 가글  (0) 2024.04.25

+ Recent posts