[BAEKJOON] 1522번 문자열 교환

2024. 5. 20. 15:40·Algorithm/투포인터

https://www.acmicpc.net/problem/1522

 

문제조건
  1. 와 b로만 이루어진 문자열이 주어질 때,  a를 모두 연속으로 만들기 위해서 필요한 교환의 최소 회수
  2. 문자열은 원형이다.
접근방법

 

사실 투포인터 라기보다는 슬라이딩윈도우 방식의 풀이이다.

원형으로 이루어진 문자열이므로, 원형을 직선으로 펼친 배열로 보았을때, 모든 경우의수를 비교해서 최솟값을 찾는 방식으로 접근했다. 물론 주어진 문자열의 길이가 1000이므로, O(n^2)안에 탐색할수 있으므로 사용할수 있는 방법이다.

 

소스코드
#include <iostream>
#define MAX 1001
using namespace std;

string s;

int main() {
	cin >> s;
	int n = s.length();
	int res = n;
	int a = 0;
	for (int i = 0; i < n; i++)
		if (s[i] == 'a') a++;
	for (int i = 0; i < n; i++) {
		int tmp = a;
		int change = 0;
		for (int j = i; j < i + n; j++) {
			if (!tmp) break;
			if (s[j % n] == 'b') {
				change++;
				tmp--;
			}
			else tmp--;
		}
		res = min(res, change);
	}
	cout << res;
}

a를 기준으로 b를 만날때마다 연속되지 않은 a와 위치를 바꾸어주고, a가 모두 연속이 되면 최솟값을 계속 갱신한다.

'Algorithm > 투포인터' 카테고리의 다른 글

[BAEKJOON] 20437번 문자열 게임2  (1) 2024.05.21
[BAEKJOON] 2531번 회전초밥  (0) 2024.03.21
[BAEKJOON] 20922번 겹치는 건 싫어  (0) 2024.03.21
'Algorithm/투포인터' 카테고리의 다른 글
  • [BAEKJOON] 20437번 문자열 게임2
  • [BAEKJOON] 2531번 회전초밥
  • [BAEKJOON] 20922번 겹치는 건 싫어
Ls._.Rain
Ls._.Rain
안되면 될때까지 삽질했던 기록
  • Ls._.Rain
    Ls{Diary}
    Ls._.Rain
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Github (2)
      • Spring (51)
        • Batch Programming (13)
        • 결제 (4)
        • 대용량 트래픽 (32)
        • OpenAI (0)
        • Security (0)
        • WebSocket (0)
        • JPA (1)
      • Algorithm (67)
        • DFS (6)
        • BFS (6)
        • Dynamic Programming (10)
        • Brute Force (4)
        • Binary Search (6)
        • 구현, 시뮬레이션 (15)
        • Stack (1)
        • Greedy (4)
        • Priority_Queue (2)
        • Back Tracking (3)
        • Geometry (2)
        • SCC (1)
        • 투포인터 (4)
        • 최대유량 (1)
        • 정렬 (1)
      • OS (0)
      • DevOps (15)
        • AWS (11)
        • Docker (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • hELLO· Designed By정상우.v4.10.0
Ls._.Rain
[BAEKJOON] 1522번 문자열 교환
상단으로

티스토리툴바