algorithm/SlidingWindow

[백준1522/실버1] 문자열 교환 - JavaScript

ayeongjin 2025. 4. 22. 00:54

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

 

 

문제 조건은

1. 모든 a를 한곳에 모아야한다

2. 문자열은 원형 구조라 처음과 끝이 이어져있다.

 

따라서 문제 풀이는

1. 최종 완성되어야할 연결된 a의 수 구하기

2. 문자열은 원형구조이므로 두배로 이어 붙이기

3. 문자열 i부터 i+a 까지 슬라이싱해서 그 안에 있는 b의 수의 최솟값 구하기

 

# 성공 코드

const str = require("fs").readFileSync("/dev/stdin").toString().trim();
const aCnt = [...str].filter((c) => c === "a").length;
const strDouble = str + str;

let result = Number(Infinity);

for (let i = 0; i < str.length; i++) {
  const window = strDouble.slice(i, i + aCnt);
  const change = [...window].filter((c) => c === "b").length;
  result = Math.min(result, change);
}

console.log(result);

 

 

요즘 JavaScript로 알고리즘 문제를 풀고 있는데, 파이썬에 있던 count() 같은 메서드가 없어 조금 불편함을 느꼈다.
문자 개수를 구하려면 filter나 반복문을 써야 한다는 점도 익숙해지기까지 시간이 좀 걸렸다.
또한 입력을 처리하는 방식도 Python의 `input()`보다 복잡하게 느껴져, 처음엔 조금 헤맸던 기억이 있다.
하지만, 배열 메서드를 잘 활용하면 직관적인 로직을 함수형 스타일로 짤 수 있다는 장점도 있었다...!