Post

Basic51 문자 개수 세기

문제: 문자 개수 세기

문제 설명

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


제한사항
  • 1 ≤ my_string의 길이 ≤ 1,000

입출력 예
my_stringresult
“Programmers”[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]

입출력 예 설명

입출력 예 #1

  • 예제 1번의 my_string에서 ‘P’가 1개, ‘a’가 1개, ‘e’가 1개, ‘g’가 1개, ‘m’이 2개, ‘o’가 1개, ‘r’가 3개, ‘s’가 1개 있으므로 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]를 return 합니다.

Solution

ascii코드의 값을 이용해서 문제를 풀었습니다. 대문자 알파벳은 65~90까지이고, 소문자 알파벳은 97~122입니다.

  • 길이 52의 0이담긴 result 배열을 만듭니다. 0부터 25 인덱스 까지는 대문자, 26부터 51까지는 소문자의 인덱스입니다.
  • my_string의 각 문자들을 돌면서 ascii코드 값이 91 미만이라면 대문자, 이상이면 소문자라고 판멸합니다.
  • 대문자라면 65로 나눈 나머지를 구하고, 소문자라면 97로 나눈 나머지에 26을 더해서 각 알파벳의 인덱스를 찾습니다.
  • result 배열에 인덱스 자리에 1을 더해줍니다.
1
2
3
4
5
6
7
import Foundation

func solution(_ my_string:String) -> [Int] {
    var result = Array(repeating:0, count: 52)
    my_string.map{ Int($0.asciiValue!) < 91 ? Int($0.asciiValue!) % 65 : Int($0.asciiValue!) % 97 + 26}.map{result[$0] += 1}
    return result
}