문제
문제설명
알파벳 소문자로만 이루어진 어떤 문자열에서, 2회 이상 나타난 알파벳이 2개 이상의 부분으로 나뉘어 있으면 외톨이 알파벳이라고 합니다.
예를 들어 "aba" 형태로 있으면 a가 2회 이상 나타나고 붙어있지 않으므로 외톨이 알파벳입니다.
또다른 예시로 "aabaa" 형태로 있으면 aa가 2회 이상 나타나고 붙어있지 않으므로 외톨이 알파벳입니다.
주어진 문자열에서 외톨이 알파벳을 모두 찾아 중복 없이 알파벳 순서대로 반환해주면 되는 문제입니다.
더보기
※제한 사항
- 1 <= input_string의 길이 <= 2,600
- input_string은 알파벳 소문자로만 구성되어 있습니다.
풀이
외톨이 알파벳을 찾기 위해 input_string의 모든 요소를 반복해주었습니다.
반복하는 과정에서 외톨이 알파벳 조건에 맞는 문자열을 찾기 위해 임시 변수 str를 만들어 주어 반복되는 각 요소를 합쳐주었습니다. 또한 str이 input_string에서 두 번이상 반복되는 패턴이면서 연속해서 붙어 있지 않는 문자열임을 확인하기 위해 input_string[i+1] 번째와 비교해주는 작업을 하였고 만약 연속되지 않는 패턴이라면 indexOf와 lastIndexOf 함수를 이용하여 인덱스를 비교해 input_string에서 두 번 이상 반복되는 문자열인지 확인해주었습니다.
아래는 풀이에 사용한 코드입니다.
function solution(input_string) {
var answer = '';
//외톨이 알파벳을 찾기 위해 같은 문자가 반복되면 반복되는만큼 합쳐주기 위해 사용한 변수
var str = '';
// input_string의 모든 요소를 탐색합니다.
for(let i=0; i< input_string.length; i++){
const ch = input_string[i]
str += ch;
// input_string[i+1]이 ch와 같지 않다면 연속되는 문자열이 아니므로
// 해당 인덱스에서 str이 두 번이상 반복되는지 확인 후 str를 초기화해줍니다.
if(input_string[i+1] != ch){
if(input_string.indexOf(str) !== input_string.lastIndexOf(str)){
answer += ch
}
str = ''
}
}
// answer이 빈 배열일 시 외톨이 알파벳이 없는 것이므로 "N" 반환
if(answer === ''){
return "N"
}
// answer의 중복을 제거하고 알파벳 순으로 정렬해줍니다.
answer = [...new Set(answer)].sort().join('')
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.02 카펫 (JavaScript) (1) | 2024.06.09 |
---|---|
[프로그래머스] Lv.01 신고 결과 받기 (JavaScript) (0) | 2024.06.07 |
[프로그래머스] Lv.02 큰 수 만들기 (JavaScript) (1) | 2024.06.06 |
[프로그래머스] Lv.02 스킬트리 (JavaScript) (1) | 2024.06.05 |
[프로그래머스] Lv.03 연습문제 [1차] 셔틀버스 (JavaScript) (1) | 2024.06.03 |