오널의 알고리즘 문제
매개변수로 String이 주어지면 중복된 char가 없는 가장 긴 서브스트링 (substring)의 길이를 찾는 문제이다. 내가 평소에 구독하는 매일프로그래밍이라는 곧에서 매주 하나씩 겁나 어려운 문제를 하나씩 보내 주는데 이걸 풀어 보려고 한다. 사실 제대로 풀어 본건 이번이 처음이다.
내 해결법
이번 문제를 푼 거는 사실 운이나 다름 없었다. 특히 ES6 이상에서 부터 생겨난 스페인 Set 덕분이었다. 이 기본적으로 제공되는 자료 구조 덕분에 쉽게 문제 답을 구할 수 있었다.
1 | function maxSubStr(str) { |
일단 Set
은 중복되는 value를 가지지 않는 데이터 구조 이므로 따로 반복문을 두번 씩 돌려서 알고리즘을 복잡하게 만들 필요가 없었다. 그저 주어진 매개변수를 배열로 만들고 그 배열로 Set을 생성한 다음 size 속성만 리턴하면 쉽게 구할 수 있다.
테스트
이 방식으로 하면 너무 쉬운 문제라 양심상 jest를 이용해서(사실 jest외 에는 별로 써본 경험이 없다..ㅠㅠ) 테스트 코드도 돌려 봤다.1
2
3
4
5
6
7
8
9
10
11
12
13const maxSubStr = require('./index.js');
test('maxSubStr 함수가 존재한다', () => {
expect(typeof maxSubStr).toEqual('function');
});
test('함수 예상 값들은', () => {
expect(maxSubStr('aabb')).toEqual(2);
expect(maxSubStr('vbvbaabb')).toEqual(3);
expect(maxSubStr('1')).toEqual(1);
expect(maxSubStr('12')).toEqual(2);
expect(maxSubStr('aaaaaa')).toEqual(1);
});
결과는 모두 통과~~~^^
정리
사실 다른 방식으로 푸신 분들의 코드도 코드워 처럼 공유하고 싶지만 검색해 보니 자바스크립트로 푸신 분이 없더라는…ㅠㅠ
스택오버플로우에서 한번 검색해 보고 다시 블로그를 수정해야 겠다.