※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |