Programmers

[프로그래머스][JS] 문자 개수 세기

winter17 2023. 6. 20. 21:41

https://school.programmers.co.kr/learn/courses/30/lessons/181902

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(my_string) {
	// 아스키코드를 문자로 변환해서 answer배열에 push
    var answer = [];
    for (let i = 65; i <= 90; i++){ // A~Z
        answer.push(String.fromCodePoint(i))
    }
    for (let j = 97; j <= 122; j++){ // a~z
        answer.push(String.fromCodePoint(j))
    }
    // my_string 문자열을 객체로 생성해서 등장 문자별로 분류하기
    let obj = {}
    for(let k = 0; k < my_string.length; k++){
        if (obj[my_string[k]]){
            obj[my_string[k]]++
        }else{
            obj[my_string[k]] = 1
        }
    }
    // answer 배열의 요소와 obj의 key가 같다면 그 요소를 해당 value로 바꾸기  
    for (let i = 0; i < answer.length; i++){
        for (o in obj){
            if (answer[i] === o){
                answer.splice(i, 1, obj[o])
            }
        }
    }
    // answer배열을 순회하면서 요소가 문자라면 0으로 바꾸기
    for (let i = 0; i < answer.length; i++){
        if(!Number(answer[i])){
            answer.splice(i, 1, 0)
        }
    }
    return answer;
}

 

 

우선 문제를 보면 A~Z, a~z까지 순서대로 정렬되어 있고 주어진 문자열의 요소를 순서대로 등장 횟수만큼 체크했다.

그러면 아스키코드를 이용해서 알파벳 대문자, 소문자 전부 하나의 배열로 만든 후

주어진 문자열을 객체로 만들어서 등장 횟수별로 분류를 한다.

문자열 객체에서 숫자들을 알파벳 배열에 push를 해야 하는데 splice와 반복문, 조건문을 사용해서 값을 바꿔준다.

여기까지 하면 문자열의 등장 횟수별로 알파벳 배열에 push가 되어있는 상태인데 

주어진 문자열 이외의 문자들 처리를 위해서 splice로 0으로 바꿔준 후 리턴한다.


리뷰

문제에서 요구하는대로 진짜 쌩으로 구현했는데 솔직히 통과 못할 줄 알았는데 통과해서 신기...

문제는 통과했으니까 기능적으로는 문제가 없지만 가독성은 떨어지고 중복되는 부분도 많은 것 같다.

특히 객체로 접근하게 되면 코드가 복잡해져서 좋은 코드라고 하기에는 무리가 있다.

 

function solution(my_string) {
    let alp = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    var answer = new Array(52).fill(0);
    for (let i = 0; i < my_string.length; i++) {
        answer[alp.indexOf(my_string[i])]++;
    }
    return answer;
}

다른 사람 코드를 확인해봤는데 가장 깔끔한 코드라서 가져와봤다.

알파벳을 문자열로 만들어서 alp변수에 저장한 후

answer 배열을 52개의 요소를 생성하는데 모두 0으로 채운다.

주어진 문자열의 길이로 반복문을 돌려서 alp문자열에서 my_string [i]의 인덱스를 찾아서 더해주면 된다.