[백준 5789] 한다 안한다 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
주어진 문자열의 양 끝에서부터 수를 하나씩 비교해가며 마지막 쌍의 값을 기준으로 결정을 내리는 문제입니다.
- 문자열은 항상
0
과1
로만 이루어져 있으며, 길이는 짝수입니다. - 양 끝에서 수를 하나씩 고르고, 두 수가 같은지 다른지 판별해야 합니다.
- 이 작업을 문자열의 모든 문자를 다 고를 때까지 반복하며, 마지막으로 비교되는 두 수로 최종 결정을 내립니다.
접근법
- 테스트케이스의 개수를 입력받습니다.
- 문자열 길이는 항상 짝수이므로, 전체 길이의 중간에서 마주보는 두 문자가 마지막 판단 대상이 됩니다.
- 즉, 왼쪽에서
길이 / 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;
}