© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 5789 - 한다 안한다

2024-09-19
BOJ
브론즈 III
cpp
원본 문제 보기
구현
문자열

문제

BOJ 5789 - 한다 안한다

짝수 길이의 0과 1로 이루어진 문자열이 주어질 때, 가운데 두 문자가 같으면 "Do-it", 다르면 "Do-it-Not"을 출력하라.

입력

테스트 케이스 수 N, 각 케이스마다 짝수 길이의 0/1 문자열이 주어진다.

출력

각 문자열에 대해 가운데 두 문자가 같으면 "Do-it", 다르면 "Do-it-Not"을 출력한다.

예제

입력출력
2 0000 0010Do-it Do-it-Not

풀이

문자열의 가운데 두 문자 인덱스를 계산하여 비교한다.

  1. 문자열 길이의 절반 s = size/2를 구한다
  2. s[s-1]과 s[s] 위치의 문자를 비교한다
  3. 같으면 "Do-it", 다르면 "Do-it-Not"을 출력한다

핵심 아이디어: 짝수 길이 문자열의 가운데 두 문자는 인덱스 len/2-1과 len/2에 위치한다.

코드

#include <bits/stdc++.h>
using namespace std;
int main()
{
  int n;
  cin >> n;
  string s1;
  for (int i = 0; i < n; i++)
  {
    cin >> s1;
    int s = s1.size() / 2;
    cout << "Do-it";
    if (s1[s - 1] != s1[s])
      cout << "-Not";
    cout << '\n';
  }
}

복잡도

  • 시간: O(N)
  • 공간: O(L) (L: 문자열 길이)