Created
April 19, 2022 14:59
-
-
Save mununki/1e1f4551740e509b7bd970669f419934 to your computer and use it in GitHub Desktop.
프로그래머스 5 - 좋은 부분 문자열
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 좋은 부분 문자열 | |
// 좋은 부분 문자열이란 어떤 문자열 s의 부분 문자열이면서 같은 알파벳이 두 번 이상 나타나지 않는 문자열을 말합니다. | |
// 예를들어 주어진 문자열이 "abac" 일 때, 부분 문자열 "a", "ab", "bac"등은 원래 문자열 "abac" 의 부분 문자열이면서 | |
// 문자열 내에 같은 알파벳이 두 번 이상 나타나지 않으므로 좋은 부분 문자열입니다. 그러나 "aba", "abac"는 문자열 내에 | |
// 같은 알파벳 'a'가 두 번 이상 나타나므로 좋은 부분 문자열이 아닙니다. 문자열 s가 주어질 때 좋은 부분 문자열의 개수를 | |
// return 하도록 solution 함수를 완성해주세요. | |
// "abac" => "a", "b", "c", "ab", "ba", "ac", "bac" | |
// "abcd" => "a", "b", "c", "d", "ab", "bc", "cd", "abc", "bcd", "abcd" | |
// 1 ~ String.length 각각의 길이만큼의 윈도우로 부분 문자열을 만든다. | |
// Set에 집어넣어 중복을 막는다. | |
// 각 item 별로 중복 문자가 있는 지를 체크해서 filter 한다. | |
// 중복 문자 존재 여부는, 한 문자씩 split 해서 Set에 집어넣은 후 개수를 비교한다. -> 다르면 중복 문자 존재 | |
open Belt | |
let solution = s => { | |
let length = s->Js.String2.length | |
let from = Array.makeBy(length, x => x) | |
let to_ = Array.makeBy(length, x => x + 1) | |
// from | to | |
// 0 | 1 | |
// 1 | 2 | |
// 2 | 3 | |
// 3 | 4 | |
// 0 | 2 | |
// 1 | 4 | |
// 2 | 4 | |
// 3 | 5 | |
from | |
->Array.map(from => to_->Array.map(to_ => s->Js.String2.slice(~from, ~to_))) | |
->Array.concatMany | |
->Set.String.fromArray | |
->Set.String.keep(sub => { | |
// if 문자열의 길이 != 문자 Set의 길이 then 중복 문자가 있다. | |
let length = sub->Js.String2.length | |
let lengthOfUnique = sub->Js.String2.split("")->Set.String.fromArray->Set.String.size | |
length == lengthOfUnique && length != 0 // 빈 문자열 제거 | |
}) | |
->Set.String.size | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let solution: string => int |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment