작성일 :

문제 링크

10202번 - Longest Subsequence

설명

각 테스트 케이스마다 X와 O로 이루어진 문자열이 주어질 때, 연속된 X로만 이루어진 가장 긴 구간의 길이를 구하는 문제입니다.


접근법

먼저 문자열을 앞에서부터 순회하며 각 문자가 X인지 확인합니다.

X가 나오면 연속 길이를 증가시키고, O가 나오면 연속 길이를 0으로 초기화하며 최대 길이를 갱신합니다.

모든 문자들을 확인하여 최대 길이를 구한 후 주어진 형식에 맞게 출력합니다.



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
using System;
using System.Text;

class Program {
  static void Main() {
    var t = int.Parse(Console.ReadLine()!);
    var sb = new StringBuilder();
    for (var tc = 0; tc < t; tc++) {
      var parts = Console.ReadLine()!.Split();
      var n = int.Parse(parts[0]);
      var cnt = 0;
      var best = 0;
      for (var i = 1; i <= n; i++) {
        if (parts[i] == "X") {
          cnt++;
          if (cnt > best)
            best = cnt;
        } else cnt = 0;
      }
      sb.Append("The longest contiguous subsequence of X's is of length ")
        .Append(best).Append('\n');
    }
    Console.Write(sb);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;

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

  int t; cin >> t;
  for (int tc = 0; tc < t; tc++) {
    int n; cin >> n;
    int cnt = 0, best = 0;
    for (int i = 0; i < n; i++) {
      string token; cin >> token;
      if (token == "X") {
        cnt++;
        best = max(best, cnt);
      } else cnt = 0;
    }
    cout << "The longest contiguous subsequence of X's is of length " << best << "\n";
  }

  return 0;
}

Tags: 10202, BOJ, C#, C++, 구현, 문자열, 백준, 알고리즘

Categories: ,