[20211116]알고리즘 풀이

2021. 11. 16. 06:19·알고리즘 풀이
모든 아나그램 찾기(해쉬, 투포인터, 슬라이딩 윈도우)
 S문자열에서 T문자열과 아나그램이 되는 S의 부분문자열의 개수를 구하는 프로그램을 작성하 세요. 아나그램 판별시 대소문자가 구분됩니다. 부분문자열은 연속된 문자열이어야 합니다.
▣ 입력설명
첫 줄에 첫 번째 S문자열이 입력되고, 두 번째 줄에 T문자열이 입력됩니다. S문자열의 길이는 10,000을 넘지 않으며, T문자열은 S문자열보다 길이가 작거나 같습니다.
▣ 출력설명
S단어에 T문자열과 아나그램이 되는 부분문자열의 개수를 출력합니다.
▣ 입력예제 1
bacaAacba abc
▣ 출력예제 1
3
출력설명: {bac}, {acb}, {cba} 3개의 부분문자열이 "abc"문자열과 아나그램입니다.
function compareMaps(map1, map2){
    if (map1.size !== map2.size) return false
    for (let [key, value] of map1) {
        if (!map2.has(key) || map2.get(key) !== value) return false
    }
    return true
}
function solution(s, t){
    let map1 = new Map()
    let map2 = new Map()
    let lt = answer = 0;
    for (let item of t) {
        if (map2.has(item)) map2.set(item, map2.get(item) + 1)
        else map2.set(item, 1)
    }
    for (let i = 0; i < 2; i++) {
        if (map1.has(s[i])) map1.set(s[i], map1.get(s[i]) + 1)
        else map1.set(s[i], 1)
    }
    for (let i = 2; i < s.length; i++) {
        if (map1.has(s[i])) map1.set(s[i], map1.get(s[i]) + 1)
        else map1.set(s[i], 1)
        if (compareMaps(map1, map2)) answer++
        map1.set(s[lt], map1.get(s[lt]) - 1)
        if (!map1.get(s[lt])) map1.delete(s[lt])
        lt++
    }
    return answer;
}

let a="bacaAacba";
let b="abc";
console.log(solution(a, b));
올바른 괄호
 괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다. (())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
▣ 입력설명
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
▣ 출력설명
첫 번째 줄에 YES, NO를 출력한다.
▣ 입력예제 1
(()(()))(()
▣ 출력예제 1
NO
function solution(s){
    let answer="YES";
    let arr = []
    for (let item of s) {
        if (item === '(') arr.push('(')
        else {
            if (arr.length === 0) answer = "NO"
            else arr.pop()
        }
    }
    if (arr.length > 0) answer = "NO"
    return answer;
}

let a="(()(()))(()";
console.log(solution(a));

 

괄호문자제거
입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.
▣ 입력설명
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
▣ 출력설명
남은 문자만 출력한다.
▣ 입력예제 1
(A(BC)D)EF(G(H)(IJ)K)LM(N)
▣ 출력예제 1
EFLM
function solution(s){
    let answer="";
    let arr = [];
    for (let item of s) {
        if (item === '(') arr.push(item)
        else if (item === ')') {
            arr.pop()
        }
        if ( item !== '(' && item !== ')' && arr.length === 0) answer += item
    }
    return answer;
}

let str="(A(BC)D)EF(G(H)(IJ)K)LM(N)";
console.log(solution(str));

'알고리즘 풀이' 카테고리의 다른 글

[20211121]알고리즘 풀이  (0) 2021.11.21
[20211120]알고리즘 풀이  (0) 2021.11.21
[20211109]알고리즘 풀이  (0) 2021.11.09
[20211028]알고리즘 풀이  (0) 2021.10.28
[20211027]알고리즘 풀이  (0) 2021.10.27
'알고리즘 풀이' 카테고리의 다른 글
  • [20211121]알고리즘 풀이
  • [20211120]알고리즘 풀이
  • [20211109]알고리즘 풀이
  • [20211028]알고리즘 풀이
JoyYellow
JoyYellow
  • JoyYellow
    JoyYellow
    JoyYellow
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • Vue (7)
      • React (10)
      • 알고리즘 풀이 (29)
      • 타입스크립트 (2)
      • Microsoft (4)
      • TIL(Today I Learned) (16)
      • Devops (4)
      • CS(Computer Science) (2)
      • Spring (1)
      • Incomplete (0)
      • JS소스모듈 (10)
      • TDD (2)
      • 스프링부트 (0)
      • CSS (8)
      • Next.js (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    노마드코더
    노개북
    개발자북클럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
JoyYellow
[20211116]알고리즘 풀이
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.