[백준 24510] 시간복잡도를 배운 도도 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
각 줄에 등장하는 for와 while을 반복문으로 보고, 같은 줄에서의 개수를 세어 최댓값을 출력하는 문제입니다.
접근법
먼저 각 줄을 문자열로 읽고 for와 while이 나타나는 위치를 모두 확인해 개수를 세어 더합니다.
다음으로 각 줄마다 계산한 개수를 비교해 최댓값을 갱신합니다.
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
using System;
class Program {
static void Main() {
var c = int.Parse(Console.ReadLine()!);
var best = 0;
for (var i = 0; i < c; i++) {
var line = Console.ReadLine()!;
var cnt = 0;
for (var j = 0; j + 2 < line.Length; j++) {
if (line[j] == 'f' && line[j + 1] == 'o' && line[j + 2] == 'r') cnt++;
}
for (var j = 0; j + 4 < line.Length; j++) {
if (line[j] == 'w' && line[j + 1] == 'h' && line[j + 2] == 'i'
&& line[j + 3] == 'l' && line[j + 4] == 'e') cnt++;
}
if (cnt > best) best = cnt;
}
Console.WriteLine(best);
}
}
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int c; cin >> c;
int best = 0;
for (int i = 0; i < c; i++) {
string line; cin >> line;
int cnt = 0;
for (int j = 0; j + 2 < (int)line.size(); j++) {
if (line[j] == 'f' && line[j + 1] == 'o' && line[j + 2] == 'r') cnt++;
}
for (int j = 0; j + 4 < (int)line.size(); j++) {
if (line[j] == 'w' && line[j + 1] == 'h' && line[j + 2] == 'i'
&& line[j + 3] == 'l' && line[j + 4] == 'e') cnt++;
}
if (cnt > best) best = cnt;
}
cout << best << "\n";
return 0;
}