작성일 :

문제 링크

5789번 - 한다 안한다

설명

주어진 문자열의 양 끝에서부터 수를 하나씩 비교해가며 마지막 쌍의 값을 기준으로 결정을 내리는 문제입니다.

  • 문자열은 항상 01로만 이루어져 있으며, 길이는 짝수입니다.
  • 양 끝에서 수를 하나씩 고르고, 두 수가 같은지 다른지 판별해야 합니다.
  • 이 작업을 문자열의 모든 문자를 다 고를 때까지 반복하며, 마지막으로 비교되는 두 수로 최종 결정을 내립니다.

접근법

  • 테스트케이스의 개수를 입력받습니다.
  • 문자열 길이는 항상 짝수이므로, 전체 길이의 중간에서 마주보는 두 문자가 마지막 판단 대상이 됩니다.
    • 즉, 왼쪽에서 길이 / 2 - 1, 오른쪽에서 길이 / 2 위치의 문자만 비교하여도 문제를 해결할 수 있습니다.
  • 이 두 문자가 같으면 "Do-it", 다르면 "Do-it-Not"을 출력합니다.

  • 비교는 한 번만 수행되므로 시간 복잡도는 O(1)입니다.

Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;

class Program {
  static void Main() {
    int count = int.Parse(Console.ReadLine());
    while (count-- > 0) {
      string str = Console.ReadLine();
      int left = str.Length / 2 - 1;
      int right = str.Length / 2;

      Console.WriteLine(str[left] == str[right] ? "Do-it" : "Do-it-Not");
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <bits/stdc++.h>

using namespace std;

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

  int testCount; cin >> testCount;
  while (testCount--) {
    string str; cin >> str;
    int left = str.size() / 2 - 1;
    int right = str.size() / 2;

    cout << (str[left] == str[right] ? "Do-it" : "Do-it-Not") << "\n";
  }

  return 0;
}