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()`보다 복잡하게 느껴져, 처음엔 조금 헤맸던 기억이 있다.
하지만, 배열 메서드를 잘 활용하면 직관적인 로직을 함수형 스타일로 짤 수 있다는 장점도 있었다...!
'algorithm > SlidingWindow' 카테고리의 다른 글
[프로그래머스/Lv2] 보석쇼핑 - Python (1) | 2025.03.04 |
---|---|
[백준13144/골드4] List of Unique Numbers - Python (0) | 2025.03.02 |
[백준2531/실1] 회전초밥 - Python (0) | 2025.01.04 |