[프로그래머스 코딩테스트 입문] A로 B 만들기 | 알고리즘 설명 & 문제 풀이 with 자바스크립트(Javascript)

Re_Go·2023년 12월 21일
0

코딩테스트연습

목록 보기
43/98
post-thumbnail
post-custom-banner

1. 문제 설명

2. 제한사항

3. 입출력 예

4. 입출력 예 설명

5. 첫번째 문제 풀이(2023-12-21)

저는 이 문제를 해석하는데 좀 애를 먹었는데, 처음에 이해했던 내용은 before을 뒤로 정렬해서 after와 같은지를 물어보는 문제인줄 알았는데, 알고보니까 before의 단어와 after을 단어를 비교해서 before의 단어를 조합해 after의 단어로 온전히 만들 수 있는지를 물어보는 문제더라고요.

즉 뒤죽박죽 섞여 있어도 before와 after의 스펠링들이 똑같이 있으면 1을, 하나라도 틀리면 0을 출력해야 하는 문제였습니다....

function solution(before, after) {
  // before와 after을 배열로 풀어헤쳐서 sort로 오름차순 해준 후 다시 문자열로 합쳐줍니다.
    let convertedBefore = before.split('').sort().join('');
    let convertedAfter = after.split('').sort().join('');
    return convertedBefore === convertedAfter ? 1 : 0;
// 둘이 같다면 1을, 하나라도 틀리면 0을 반환합니다.
}

원래 제가 생각했던 코드 (before를 뒤로 정렬해서 after와 똑같은지를 판별하는 코드)를 참고하시라고 올려놓도록 하겠습니다.

function solution(before, after) {
    let convertedBefore = before.split('')
    for(let  i = 0 ; i < Math.floor(convertedBefore.length/2) ; i++){
    // for의 범위를 배열의 절반으로 지정한 이유는 배열의 첫번째와 마지막번째, 배열의 두번째와 마지막의 전번째 순서대로 섞어주면 배열을 반대로 뒤집는 효과를 줄 수 있기 때문입니다.
    // 그래서 교환 코드는 아래와 같이 작성했고 for문 범위는 스위칭을 하는 횟수라고 봐주시면 될 것 같습니다. 만약 5의 배열이라고 한다면 짝 없이 하나 남는 가운데는 굳이 안바꿔도 되고, 6의 배열이라고 하면 짝을 맞춰 바꿀 수 있게 됩니다.
        let tmp = 0;
        temp = convertedBefore[i]
        convertedBefore[i] = convertedBefore[(convertedBefore.length - 1) - i]
        convertedBefore[(convertedBefore.length - 1) - i] = temp;
    }
    convertedBefore = convertedBefore.join('')
    let result = convertedBefore === after ? 1 : 0;
    return result;
}
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.
post-custom-banner

0개의 댓글