[TIL] 23.12.30

sssujijjl·2023년 12월 30일

[TIL]

목록 보기
7/51

[문제]

  • 1주차 : 문자열 연습하기

대문자와 소문자가 섞여있는 문자열에 s에 'p'의 개수와 'y'의 개수를 비교해
같으면 True, 다르면 False를 return

'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다.

(단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.)

[풀이]

솔직하게 문제를 보고 고민하고, 1주차 배웠던 내용도 찾아보고, 여러가지 검색해보았지만.. 아직 나는 모르는게 있다면 배우고, 공부하는게 더 좋을거 같아서 풀이 영상을 보았다.

- 해설 영상 정답코드

function solution(a) {
    var answer = true;

    // toUpperCase : 모두 대문자로 변환
    a = a.toUpperCase();

    // "P"가 있으면 + 1
    // "Y"가 있으면 - 1
    var num = 0;
    for (var i = 0; i < a.length; i++) {
        if (a[i] === 'P') {
            num++;
        } if (a[i] === 'Y') {
            num--;
        }
    }

    if (num === 0) {
        answer = true
    } else {
        answer = false
    }

    return answer;
}

해설 영상의 풀이는 다음과 같다.

다른 사람들의 풀이도 보면서 모르는 부분 공부를 했다.

- 다른 사람 풀이 1

function solution1(b) {
    return b.toUpperCase().split("P").length
        === b.toUpperCase().split("Y").length;
}
// 문자열을 분할시켜서 길이 확인

- 다른 사람 풀이 2

function solution2(c) {
    return c.match(/p/ig).length === c.match(/y/ig).length;
}
// match : 포함된 문자를 찾으면 이를 반환함
// i : 대문자, 소문자 상관없이 찾음
// g : 해당하는 문자를 전부 찾음

풀이 2번에 "p" 나 "y"가 없는 경우 error가 난다는 댓글이 많아
혼자 위의 방법으로 다르게 풀이를 생각해 보았다.

function solution3(d) {
    const P = (d.match(/p/ig) || []).length;
    const Y = (d.match(/y/ig) || []).length;

    if (P === null && Y === null) {
        return true;
    }

    if (P === Y) {
        return true;
    } else {
        return false;
    }
}

[배운점]

1주차 수업을 들으며 아직 배울게 너무너무 많다는 생각을 했다.
그래도 문제는 찾아보며 풀 수 있을거라고 생각했지만, 많이 부족한 걸 느꼈다.
더 열심히 해야겠다.

0개의 댓글