[프로그래머스-기초] 문자열 바꿔서 찾기

JE·2023년 8월 25일
0

코테/코플릿

목록 보기
29/57

문제 설명

문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.

제한사항

1 ≤ myString의 길이 ≤ 100
1 ≤ pat의 길이 ≤ 10
myString과 pat는 문자 "A"와 "B"로만 이루어진 문자열입니다.

입출력 예

myStringpatresult
"ABBAA""AABB"1
"ABAB""ABAB"0

입출력 예 설명

입출력 예 #1

"ABBAA"에서 "A"와 "B"를 서로 바꾸면 "BAABB"입니다. 여기에는 부분문자열 "AABB"가 있기 때문에 1을 return 합니다.
입출력 예 #2

"ABAB"에서 "A"와 "B"를 서로 바꾸면 "BABA"입니다. 여기에는 부분문자열 "BABA"가 없기 때문에 0을 return 합니다.

💻 내가 작성한 코드

function solution(myString, pat) {
    let str = '';
    for(let i in myString){
        if(myString[i] === 'A'){
            str += 'B'
        }
        if(myString[i] === 'B'){
            str += 'A'
        }
    }

    return str.includes(pat) ? 1 : 0
}

제일 기본적인 방법인 for문을 사용해 AB로, BA로 변경했다.

🛠️ 리팩토링

function solution(myString, pat) {
    let str = '';
    for(let i in myString){
        str += (myString[i] === 'A' ? 'B' : 'A')
    }    
    return str.includes(pat) ? 1 : 0
}

리팩토링을 진행해 좀 더 간결하게 작성했다.
삼항연산자는 if문과 달리 값이 될 수 있기에 조건이 충족 될 경우
str += 'B' 또는 str += 'A' 값으로 반환한다.

💻 다른 사람이 작성한 코드

const solution = (myString, pat) => [...myString].map(v => v === 'A' ? 'B' : 'A').join('').includes(pat) ? 1 : 0
function solution(myString, pat) {
    const newPat = [...pat].reduce((acc, cur) => {
        if (cur === 'A') {
            acc += 'B';
        } else {
            acc += 'A';
        }

        return acc;
    }, '');

    return myString.includes(newPat) ? 1 : 0;
}

spread 문법으로 배열을 만들고 map, reduce 메서드를 사용해 코드를 작성하셨다.

나도 초반에는 배열로 작성해 볼까 했지만,
for문으로도 충분히 깔끔한 코드를 작성할 수 있다 생각해 변경하지 않았다.


✏️ 마치며

여러 관점으로 코드를 확인하니 확실히
생각 하는게 넓어지는 것 같다.

좀 더 자주 문제를 풀어봐야겠다.

profile
[프론트 애송이] 작은 깨달음도 기록하기

0개의 댓글