프로그래머스 181902번 문자 개수 세기 - Python, Java
문제 설명
알파벳 대소문자로만 이루어진 문자열 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_string | result |
|---|---|
| “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 합니다.
코드 구현
Python
def solution(my_string):
answer = []
for i in range(65, 91):
count = 0
for string in my_string:
if string == chr(i):
count += 1
answer.append(count)
for i in range(97, 123):
count = 0
for string in my_string:
if string == chr(i):
count += 1
answer.append(count)
return answer
Java
class Solution {
public String solution(int q, int r, String code) {
StringBuilder answer = new StringBuilder();
for (int i = 0; i < code.length(); i += 1) {
if (i % q == r) {
answer.append(code.charAt(i));
}
}
return answer.toString();
}
}
개선할 점 - Python
- 아래와 같은 방법을 통해 연산 횟수를 줄일 수 있다.
def solution(my_string):
result = [0] * 52
for char in my_string:
if char.isupper():
result[ord(char)-65] += 1
else:
result[ord(char)-97+26] += 1
return result