[백준 2684] 동전 게임 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
총 40번
동전을 던진 결과 문자열이 주어졌을 때,
길이가 3
인 연속된 부분 문자열 중 8가지
가능한 패턴("TTT"
, "TTH"
, ...
, "HHH"
)이 각각 몇 번씩 등장하는지 세어 출력하는 문제입니다.
접근법
- 길이가 정확히
40
인 문자열이 주어지므로,
인덱스0
부터37
까지 총38
개의 연속된 세 글자 구간을 만들 수 있습니다. - 각 구간에 대해 부분 문자열을 추출한 뒤,
미리 정해둔8가지
패턴별로 등장 횟수를 누적한 후 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var patterns = new List<string> {
"TTT", "TTH", "THT", "THH",
"HTT", "HTH", "HHT", "HHH"
};
int t = int.Parse(Console.ReadLine());
while (t-- > 0) {
string s = Console.ReadLine();
var freq = new Dictionary<string, int>();
foreach (var pat in patterns) freq[pat] = 0;
for (int i = 0; i < 38; i++) {
string sub = s.Substring(i, 3);
if (freq.ContainsKey(sub)) freq[sub]++;
}
foreach (var pat in patterns)
Console.Write(freq[pat] + " ");
Console.WriteLine();
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
vector<string> patterns = {
"TTT", "TTH", "THT", "THH",
"HTT", "HTH", "HHT", "HHH"
};
int t; cin >> t;
while (t--) {
string s; cin >> s;
map<string, int> freq;
for (int i = 0; i < 38; ++i)
freq[s.substr(i, 3)]++;
for (const auto& p : patterns)
cout << freq[p] << " ";
cout << "\n";
}
return 0;
}