작성일 :

문제 링크

24510번 - 시간복잡도를 배운 도도

설명

각 줄에 등장하는 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;
}