본문 바로가기
알고리즘 문제풀이/백준

[백준 20310] 타노스

by m2162003 2020. 12. 31.

www.acmicpc.net/problem/20310

 

20310번: 타노스

어느 날, 타노스는 0과 1로 이루어진 문자열 $S$를 보았다. 신기하게도, $S$가 포함하는 0의 개수와 $S$가 포함하는 1의 개수는 모두 짝수라고 한다. 갑자기 심술이 난 타노스는 $S$를 구성하는 문자

www.acmicpc.net

문자열 알고리즘 문제

문자열 내의 순서는 고정이라는 전제하에 풀어야 한다. 아니면 25점 ㅠ

 

0과 1 절반씩을 날린다고 했으므로 사전순으로 빠른 것을 구하기위해 0은 뒤에 절반을, 1은 앞에 절반을 날린다.ㅏ

덱을 사용해도 되지만 배열에서 해결하기 위해 머지소트에서 사용하는 로직을 사용했다.

 

#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
char s[501];
int main(void)
{
  scanf("%s", s);
  int n = strlen(s);
  vector<int> zero;
  vector<int> one;
  for (int i = 0; i < n; i++)
  {
    if (s[i] == '0')
    {
      zero.push_back(i);
    }
    else
    {
      one.push_back(i);
    }
  }

  int sz = zero.size() / 2;
  int so = one.size() / 2;

  int left = 0, right = so;
  while (left < sz && right < so * 2)
  {
    if (zero[left] < one[right])
    {
      left++;
      printf("0");
    }
    else
    {
      right++;
      printf("1");
    }
  }

  while (left < sz)
  {
    printf("0");
    left++;
  }

  while (right < so * 2)
  {
    printf("1");
    right++;
  }

  return 0;
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 6118] 숨바꼭질  (0) 2021.01.01
[백준 2262] 토너먼트 만들기  (0) 2020.12.31
[백준 17392] 우울한 방학  (0) 2020.12.31
[백준 16112] 5차 전직  (0) 2020.12.31
[백준 11501] 주식  (0) 2020.12.31

댓글