[프로그래머스/코딩테스트 모음/Javascript] A로 B 만들기

TED·2023년 9월 23일
0

Javascript CodingTest

목록 보기
35/63
post-thumbnail

< 오늘의 문제 >

A로 B 만들기

function solution(before, after) {
    // 문자열 before를 뒤집어 after와 비교
    if (before.split('').reverse().join('') === after) {
        return 1;
    } else {
        return 0;
    }
}
  • 나의 !!!!틀린!!!! 풀이
    : 그저 before 문자열을 뒤집었을때 after 문자열과 같으면 1 아니면 0이라는 문제라고 생각했고
    풀이했는데 자꾸만 틀리는 테스트케이스가 있어서 당황했다. 이유를 당최 알수가없었는데 고민하다 알게된건
    before 문자열을 단순히 뒤집은 후 after와 비교하는 방식을 사용하였으므로, 주어진 요구사항과 일치하지 않는다.
    이 코드는 문자열을 뒤집는 것이 아니라 문자열을 역순으로 만들어 비교하고 있기 때문에 오답이 발생할 수 있다.

좀 더 쉬운 이해를 위해서 예시를 긁어왔다.
before = dlrowolleh
after = worldhello

before == after
False

before == dlro + wolleh
True

after == world + hello
True

before == dlro + wolleh == after == world + hello
True

첫 번째 비교는 문자열 before와 after를 비교합니다. 두 문자열의 순서가 다르기 때문에, 비교 결과는 False입니다.

두 번째 비교는 문자열 before를 뒤집은 문자열과 비교합니다. 두 문자열의 문자가 모두 동일하기 때문에, 비교 결과는 True입니다.

세 번째 비교는 문자열 after를 두 부분으로 나누어 비교합니다. 두 부분의 문자가 모두 동일하기 때문에, 비교 결과는 True입니다.

네 번째 비교는 두 번째 비교와 세 번째 비교의 결과를 비교합니다. 두 비교의 결과가 모두 True이기 때문에, 네 번째 비교의 결과도 True입니다.

따라서, 문자열 before와 after는 문자열의 순서를 고려하지 않으면 동일하다고 할 수 있습니다.

하지만, 문자열 dlro와 world는 순서가 다르고, 문자열의 길이가 다르기 때문에, 실제로는 동일하지 않습니다.

function solution(before, after) {
    var answer = 0;
    const sortedBefore = before.split('').sort().join('');
    const sortedAfter = after.split('').sort().join('');

    // 정렬된 문자열이 동일하면 1을 반환, 아니면 0을 반환
    if (sortedBefore === sortedAfter) {
        return 1;
    } else {
        return 0;
    }
}
  • 나의 풀이
    : 이 코드에서는 before와 after를 정렬한 후에 비교하는 방식을 사용했다. 이 방식은 문자열 내의 문자들을 임의의 순서로 재배치하여 before를 after로 만들 수 있는 경우를 정확히 처리한다. 그래서 두 번째 코드가 주어진 요구사항에 더 부합하고 정확한 결과를 반환하는 것이다
function solution(before, after) {
    return before.split('').sort().join('') === after.split('').sort().join('') ? 1 : 0;
}
  • 다른 사람 풀이
    : 삼항연산자로 풀이하는 건 항상 생각을 못하게되서 풀이를 보면 짜릿하당
profile
컴맹 개발 입문자

0개의 댓글