✅문제설명
문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
- mode가 0일 때
- code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
- code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
- mode가 1일 때
- code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
- code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
✅입출력 예
✅입출력 예 설명
💡내가 작성한 코드
function solution(code) {
let ret = [];
let mode = 0;
for(let i = 0; i < code.length; i ++){
if(code[i] == 1){
if(mode == 1){mode = 0}
else if(mode == 0){mode = 1}
}
if(mode == 0){
if(code[i] != 1 && i % 2 == 0){
ret.push(code[i]);
}
}else if(mode == 1){
if(code[i] != 1 && i % 2 == 1){
ret.push(code[i]);
}
}
}
if(ret == '' ){
return "EMPTY";
}else{
return ret.join("");
}
}
💡다른 사람들 풀이
function solution(code) {
let answer = '';
let mode = 0;
for (let i = 0; i < code.length; i += 1) {
if (Number(code[i]) === 1) {
mode = mode === 1 ? 0 : 1;
}
if (Number(code[i]) !== 1 && i % 2 === mode) {
answer += code[i];
}
}
return answer.length > 0 ? answer : 'EMPTY';
}
멋지다.. 일단 굳이 배열을 만들어서 다시 join 문으로 바꿀 필요가 없었다. 문자열이라는 것을 표현할 때는 ' ' 이렇게 써주면 됐다. 그리고 문자를 추가하기 때문에 push 대신 + 로 했다는 것!!
코드를 작성하면서도 너무 길다고 느껴졌던 mode가 1일때만 바꾼다.! mode = mode === 1 ? 0 : 1; 요렇게 짧은 코드로 작성할 수 있었다. 삼항식을 활용해야겠다 까지는 생각이 들었는데 막상 응용이 되지 않았다.
그리고 Number(code[i]) === 1 이코드!! 나는 == 이걸 활용했지만 === 이걸 사용해서 타입까지 비교했고 그래서 문자인 '1'을 Number로 바꾸셨다.
또 Number(code[i]) !== 1 라는 코드는 중복이 되니깐 한번만 사용하시고 i % 2 === mode 이게 진짜 천재 천재 천재.... 난 왜 저걸 캐치하지 못했지.. 문제 이해하는라고 바쁘다..ㅎㅎ 암튼 사람들 코드보면 진짜 멋지다. 너도 지금보다 더 성장한 개발자가 되고 싶다 !!!
문제를 풀며 습득한 지식
- else문과 else if문의 차이점 else문은 if문의 조건이 거짓일 경우이다. else if문은 새로운 조건을 추가할 수 있다
'알고리즘 > 프로그래머스' 카테고리의 다른 글
부족한 금액 계산하기 (0) | 2023.11.13 |
---|---|
원소들의 곱과 합 (0) | 2023.11.07 |
주사위 게임 2 - Math.pow() / 거듭 제곱의 표현 (1) | 2023.11.06 |
등차수열의 특정한 항만 더하기 - reduce() (0) | 2023.11.05 |
추억 점수 (0) | 2023.10.24 |