연습장

49. 문자개수 세기 본문

프로그래머스/0단계

49. 문자개수 세기

js0616 2023. 7. 10. 20:58

Q. 알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.

 


result = [ ] 라는 배열안에 0 이 각각 26개씩 (A-Z , a-z)  총 52개 가 존재하는 배열이 있다. 

주어진 my_string 에 따라서 A 일 경우 0 번째 인덱스가 1 증가.

AAB 일 경우 0번째 인덱스가 2증가 , 1번째 인덱스가 1 증가 이런식으로 카운팅 해주는게 목표이다.

 

잘 생각해봤는데

 

항상 이런 문제를 보면 유니코드로 변환하는게 먼저 생각난다.

직접 A-z 까지 뭔가 기준이 될 배열이나 dic를 만들지 않고는 풀 수 없을까 하다가 

 

결국 유니코드를 이용해서 풀었다.

 

문자 1개를 우리가 원하는 배열의 인덱스 숫자로 바꾸는 함수 StoN 을 정의하고

   A의 값이 유니코드로 65인데 우리가 원하는 값은 0 이 되야 하므로 65 를 빼고 

  소문자의 경우 그다음 else if 문에서 진행하는데

   a 의경우 유니코드로 97 이므로 97을 뺀 후 A-Z 자리 다음인 26번째 자리에 오도록 26을 더해주었다. 

 

0 이 52개 든 배열을 만든다음

my_string 을 확인해서 배열의 숫자를 바꿔 주었다. 

        // 문자를 숫자로 바꾸는 함수
        const StoN = (i) => {
            if (i <= 'Z') {
                let S_num = i.charCodeAt() - 65
                return S_num
            }
            else if (i <= 'z') {
                let s_num = i.charCodeAt() - 97 + 26
                return s_num
            }
        }

        function solution(my_string) {
            var answer = [];
            // 0이 든 배열을 만든다.
            for (let i = 0; i < 52; i++) {
                answer[i] = 0
            }
            // 만들어둔 숫자 변환 함수에 넣는다.
            for (let i = 0; i < my_string.length; i++) {
                answer[StoN(my_string[i])] += 1
            }
            return answer;
        }

 

 

'프로그래머스 > 0단계' 카테고리의 다른 글

51. 2의 영역  (1) 2023.07.10
50. 리스트 자르기  (0) 2023.07.10
48. 세로 읽기  (0) 2023.07.10
47. 문자열 뒤집기  (0) 2023.07.10
46. 문자열의 앞의 n글자  (0) 2023.07.10