오늘 알고리즘은 의아했습니다.
물론 제가 개념을 완벽히 몰라서 이해하지 못한거겠지만 말이죠.
문제 설명
주어진 문자열에서 같은 두 문자 사이에 있는 문자열의 길이를 리턴하는 문제였습니다.
같은 두 문자열이 없다면 -1을 리턴하고!
첫번째 답안
/**
* @param {string} s
* @return {number}
*/
var maxLengthBetweenEqualCharacters = function(s) {
let num = -1;
for(let i=0; i<s.length; i++) {
let isEqual = s.lastIndexOf(s[i]);
num = Math.max(-1, isEqual-1);
}
return num;
};
보이..십니까?
저는 해당 코드를 작성하고 무조건 됐다! 라고 생각했습니다.
하지만 테스트 결과 Wrong Answer를 보게 되었는데요.
같은 두 문자가 존재할 땐 테스트 케이스가 pass지만,
중복되어지는 문자가 없을 땐 문자열의 끝에 있는 알파벳의 index를 리턴하는
문제가 있었습니다.
저는 여기서 변수 num을 반복 사용하는 것을 떠올렸는데요,
변수 num과 Math.max 내부에서 사용한 isEqual-1을 응용했습니다.
가장 마지막의 isEqual을 0으로 만들어주면 결국 최대값은 -1로
고정이 된다는 것을 뒤늦게 깨달았습니다.
두번째 답안
/**
* @param {string} s
* @return {number}
*/
var maxLengthBetweenEqualCharacters = function(s) {
let num = -1;
for(let i=0; i<s.length; i++) {
let isEqual = s.lastIndexOf(s[i]);
num = num < isEqual - i - 1 ? isEqual - i - 1 : num;
}
return num;
};
쉽게 해결할 수 있을 줄 알았는데 45분동안 붙잡고 있었던 제 자신의
한계가 느껴지는 문제였습니다..
뭐..그래도 언젠간 경험치로도 쉽게 알고리즘을 정복할 그 날이 오겠죠!
'Algorithm' 카테고리의 다른 글
LEETCODE 2331. Evaluate Boolean Binary Tree (0) | 2024.05.20 |
---|---|
LEETCODE 824. Goat Latin (0) | 2024.05.17 |
LEETCODE 908. Smallest Range I (0) | 2024.05.06 |
Leetcode 682. Baseball Game (0) | 2023.05.18 |
Leetcode 482. License Key Formatting (0) | 2023.03.20 |