문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
mode가 0일 때
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
1 ≤ code의 길이 ≤ 100,000
code는 알파벳 소문자 또는 "1"로 이루어진 문자열입니다.
입출력 예
code | result |
---|---|
"abc1abc1abc" | "acbac" |
입출력 예 설명
입출력 예 #1
code의 각 인덱스 i에 따라 다음과 같이 mode와 ret가 변합니다.
i code[i] mode ret 0 "a" 0 "a" 1 "b" 0 "a" 2 "c" 0 "ac" 3 "1" 1 "ac" 4 "a" 1 "ac" 5 "b" 1 "acb" 6 "c" 1 "acb" 7 "1" 0 "acb" 8 "a" 0 "acba" 9 "b" 0 "acba" 10 "c" 0 "acbac" 따라서 "acbac"를 return 합니다.
※ 2023년 05월 18일 지문이 수정되었습니다.
function solution(code) {
let result = '';
let mode = 0;
for(let i = 0; i < code.length; i++){
if(mode === 0){
if(code[i] !== '1' && i % 2 === 0){result += code[i]}
if(code[i] === '1') {mode = 1}
} else if(mode === 1){
if(code[i] !== '1' && i % 2 !== 0){result += code[i]}
if(code[i] === '1') {mode = 0}
}
}
return result.length === 0 ? 'EMPTY' : result;
}
초반에 문제를 풀었는데 케이스 두개가 자꾸 실패
했다고 표시 되었다.
다른 사람들의 질문을 보니 ret가 빈문자열인 경우를 작성하지 않아서 였다.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
이래서 한국말은 끝 까지 봐야한다...ㅎ
답을 반환할 result와 mode를 선언해 줬다.
for문으로 문자를 순환하고
mode의 값에 따라 조건을 다르게 줬다.
더물어 code[i]가 '1'이 아니고 홀수인 경우, 짝수인 경우 reulst에 code[i]요소를 추가했다.
마지막으로 result의 길이가 0인 경우 'EMPTY'를 아닌 경우 result를 반환했다.
function solution(code) {
let result = '';
let mode = 0;
for(let i in code){
if(code[i] === '1'){
mode = mode === 0 ? 1 : 0
}
if(code[i] !== '1'){
if(mode === 0 && i % 2 === 0){
result += code[i]
}
if(mode === 1 && i % 2 !== 0){
result += code[i]
}
}
}
return result.length === 0 ? 'EMPTY' : result;
}
result.length === 0
이 아닌 result.length > 0
으로 표시해function solution(code) {
var answer = code.replaceAll("1","").split("").filter((val, idx)=> idx%2 === 0).join("");
return answer.length > 0 ? answer : "EMPTY";
}
다른 분들의 코드는 나와 비슷하지만
이분은 진짜 다른 방식으로 문제를 푸셔서 가져와 봤다.
코드를 어떻게 풀어가는지 이해했지만 이게 왜 성공되었는지 아직도 잘 모르겠다.
문제를 다시 읽어봐야겠다.
function solution(code) {
let odd = false
return Array.from(code).reduce((acc, v, i) => {
if (v === '1') {
odd = !odd
return acc
}
return (i % 2 === (odd ? 1 : 0)) ? acc + v : acc
}, '') || 'EMPTY'
}
이분은 mode를 boolean 값으로 사용하고 배열의 형태로 reduce를 사용하셨다.