TIL 20230524

M·2023년 5월 23일
1

TIL

목록 보기
7/42

강의 1주차를 마치고 숙제로 프로그래머스에서 알고리즘을 풀었다.
솔직히 처음엔 어버버 하면서 이것저것 해봤지만 정말 이해가 안되었다.

문제

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. 
s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 
solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 
단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

기본 뼈대

function solution(s){
    var answer = true;
  
}

일단 대소문자를 구별하지 않는다니까 통일을 시켜야할것 같다.
혼자 힘으로 해보려고 노력했지만, 정말 갈피가 안잡히고 이상한 코드들만 쓰는것 같았다.
그래서 같은반 사람들한테 조언을 구해보았고, 소문자로 통일하게 만드는 메소드를 알게되었다.

toLowerCase() // 소문자로 변환	 

toUpperCase() //대문자로 변환

p와 y의 갯수들을 넣어줄 변수 2개를 선언한뒤, 반복문과 조건문을 사용했다.

function solution(s) {
    let sp = 0;
    let sy = 0;
    let a = s.toLowerCase();
    for (let key in a) {
        if (a[key] === 'p') {
            sp++;
        } else if (a[key] === 'y') {
            sy++;
        }
        if (sp === sy) {
            return true;
        } else if (sp !== sy) {
            return false;
        }
    }
}

잘 돌아가겠지!? 라고 생각했지만 sp와 sy의 변수 값이 좀 이상했다. 뭐가 문제인지 모르겠지만,
조언을 구해서 힌트를 받았지만, 이것만큼은 내 힘으로 꼭 풀고 싶었다.
toLowerCase()메소드로 소문자로 잘 변환이 되었는지 console.log를 찍어서 확인하고,
어디서부터 잘못된건지 계속 콘솔을 찍어서 확인했다. 그렇게 한시간이 지나가고.. 설마설마 했지만.. .
sp와 sy의 값을 비교해서 if조건문으로 return값을 주는 부분을 for문 안에 작성해버린것이다.

function solution(s) {
    let sp = 0;
    let sy = 0;
    let a = s.toLowerCase();
    for (let key in a) {
        if (a[key] === 'p') {
            sp++;
        } else if (a[key] === 'y') {
            sy++;
        }
    }
    if (sp === sy) {
        return true;
    } else if (sp !== sy) {
        return false;
    }
}

이와 같이 수정하니 잘 동작하였고 프로그래머스에 채점을 해보니 정답이였다.
들여쓰기에 대한 개념이 좀 부족했던것 같다. 다음에도 똑같은 실수를 반복하진 말아야지..
그리고 뭔가 내 힘으로 푼게 아닌것 같아서 지웠다가 다시 적어보고, for ~ in문으로
변경한뒤에, .toLowerCase()메소드도 사용하지 않고 다시 만들어봤다.

function solution(s) {
    let sp = 0; 
    let sy = 0;
    for (let i = 0; i < s.length; i++) {
        if (s[i] === 'p' || s[i] === 'P') {
            sp++;
        } else if (s[i] === 'y' || s[i] === 'Y') {
            sy++;
        }
    }
    if (sp === sy) {
        return true;
    } else if (sp !== sy) return false;
}

잘 동작했고, 오늘도 바보같은 나였다. 끗!!!

profile
자바스크립트부터 공부하는 사람

1개의 댓글

comment-user-thumbnail
2023년 5월 23일

문제를 멋지게 푸셨군요!!! 대단합니다

답글 달기