🗃️javascript/프로그래머스

문자열 바꿔서 찾기(Lv.0)[불리언에 +연산자를 붙이면 1,0으로 형변환]

하얀성 2023. 9. 3. 10:30

<문제>

문자 "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 합니다.

※ 2023년 05월 15일 제한사항 및 테스트 케이스가 수정되었습니다. 기존에 제출한 코드가 통과하지 못할 수 있습니다.

 


<제출답안>

function solution(myString, pat) {
    return [...myString].map(x => x === "A"? x="B" : x="A").join("").includes(pat)? 1: 0;
}

<보충>

+ 기호를 앞에 붙이면 true나 false 값이 각각 1 혹은 0으로 변환되는 이유는 JavaScript의 형변환 때문입니다.

JavaScript에서는 + 연산자가 사용되면 숫자로의 형변환이 시도됩니다. 불리언 값 true와 false는 각각 1과 0으로 형변환이 됩니다.

1
2
3
4
5
6
7
8
let result = true;
 
console.log(+result); // 1
 
result = false;
 
console.log(+result); // 0
 
cs

 

<다른 답안>

function solution(myString, pat) {
  return +myString.includes([...pat].reduce((prev, char) => prev + (char === 'A' ? 'B' : 'A'), ''));
}