백준/ Silver 2 문제 , 백준 Node.js 자바스크립트 12891 , DNA 비밀번호 [슬라이딩 윈도우]
풀이 시간
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
문제 출처
https://www.acmicpc.net/problem/12891
풀이
0번 인덱스부터 P 자리까지 각각 dict에 담아 각 최소갯수를 충족했는지를 체크해준다.
이후 한자리 인덱스씩 늘려가면서 dict를 단어에 맞게 변경시킨뒤 체크해주면서 조건에 충족하면 카운트해준다.
dict를 선언하지 않고 또 다른 for문을 선언해서 매 새 문자열마다 조건에 부합하는지 체크해주는 방법도 있지만 dict를 사용하는 것이 좀더 간결한 코드가 나와 이 방법을 택했다.
S자리보다 P자리가 항상 작거나 같은 조건이기 때문에 따로 예외상황은 발생하지 않는다.
정답
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n")
.map((v) => v.split(" "));
const [S, P] = input.shift().map(Number);
const DNA = input[0].toString();
const [A, C, G, T] = input[1].map(Number);
function solution(S, P, DNA, A, C, G, T) {
const check = () => {
if (dict["A"] >= A && dict["C"] >= C && dict["G"] >= G && dict["T"] >= T)
return true;
else return false;
};
const dict = {};
[dict["A"], dict["C"], dict["G"], dict["T"]] = [0, 0, 0, 0];
let cnt = 0;
for (let i = 0; i < P; i++) dict[DNA[i]] += 1;
cnt = check() === true ? cnt + 1 : cnt;
for (let j = 0; j < S - P; j++) {
dict[DNA[j]] -= 1;
dict[DNA[P + j]] += 1;
cnt = check() === true ? cnt + 1 : cnt;
}
return cnt;
}
console.log(solution(S, P, DNA, A, C, G, T));
반응형
'알고리즘 공부 > 백준 - 자바스크립트' 카테고리의 다른 글
백준/ Silver 4 문제 , 백준 Node.js 자바스크립트 12847 , 꿀 아르바이트 [슬라이딩 윈도우] (1) | 2022.10.05 |
---|---|
백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 21921 , 블로그 [슬라이딩 윈도우] (0) | 2022.10.04 |
백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 15565 , 귀여운 라이언 (0) | 2022.10.02 |
백준/ Silver 2 문제 , 백준 Node.js 자바스크립트 14465 , 소가 길을 건너간 이유 5 (0) | 2022.10.01 |
백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 2531 , 회전 초밥 (0) | 2022.09.30 |