프로그래머스 문자 개수 세기 - LV.0
문제
- 문자열 my_string이 매개변수로 주어집니다.
- my_string은 알파벳 대소문자로만 이루어져 있습니다.
- my_string 안에 있는 A ~ Z까지 a ~ z까지의
- 개수를 담은 배열을 출력하는 문제입니다.
- 입출력 예
-
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]
-
테스트 (인텔리제이)
- 알파벳 배열을 대문자부터 순서대로 다음으로 소문자도 순서대로 입력하여 선언해줍니다.
- my_string의 문자열을 split 메서드로 문자 하나씩 분리해서 문자열 배열로 만들어줍니다.
- answer의 크기를 52로 초기화 해주면 됩니다. (int 배열은 크기만 지정해주면 모든 값이 0으로 초기화 됩니다.)
- 이제 my_string만큼 순회하는 for문과 alphabet 크기만큼 순회하는 for문을 만들어 my_string의 원소 하나하나 비교합니다. alphabet의 원소 위치와 answer에 카운트 되어야 하는 위치는 같기 때문에 my_string의 원소값과 alphabet의 원소값이 같으면 alphabet 인덱스 번호를 이용하여 answer의 원소를 카운트 하면 됩니다.
- 이후 다른 사람 풀이를 보고 더 좋은 코드가 있어 가져와 봤습니다.
- answer의 크기를 52로 초기화 합니다. (대문자 + 소문자 개수)
- my_string의 크기만큼 순회하는 for문을 만들고
- my_string을 char 타입의 c에 하나씩 담기도록 charAt 메서드를 사용합니다.
- if문으로 c가 'a'보다 크거나 같으면
- answer의 c - 'a' + 26 번 인덱스 위치의 값을 +1 해주고
- else 부분에는 answer의 c - 'A'번 인덱스 위치의 값을 +1 해주면 됩니다.
- (아스키코드를 참고하시면 풀이가 더 쉽게 이해됩니다.)
package com.namji.codingtest;
import java.util.Arrays;
public class 왼쪽_오른쪽 {
public static void main(String[] args) {
/*
문자열 my_string이 매개변수로 주어집니다.
my_string은 알파벳 대소문자로만 이루어져 있습니다.
my_string 안에 있는 A ~ Z까지 a ~ z까지의
개수를 담은 배열을 출력하는 문제입니다.
입출력 예
my_string
"Programmers"
result
[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]
*/
String my_string = "Programmers";
String[] s = my_string.split("");
String[] alphabet = {
"A", "B", "C", "D", "E", "F", "G", "H", "I",
"J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z",
"a", "b", "c", "d", "e", "f", "g", "h", "i",
"j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z"};
int[] answer = new int[52];
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < alphabet.length; j++) {
if (s[i].equals(alphabet[j])) {
answer[j] += 1;
}
}
}
System.out.println(Arrays.toString(answer));
// String my_string = "Programmers";
// int[] answer = new int[52];
// for (int i = 0; i < my_string.length(); i++) {
// char c = my_string.charAt(i);
// if (c >= 'a') {
// answer[c - 'a' + 26]++;
// } else {
// answer[c - 'A']++;
// }
// }
// System.out.println(Arrays.toString(answer));
}
}
프로그래머스 코드
class Solution {
public int[] solution(String my_string) {
String[] s = my_string.split("");
String[] alphabet = {
"A", "B", "C", "D", "E", "F", "G", "H", "I",
"J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z",
"a", "b", "c", "d", "e", "f", "g", "h", "i",
"j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z"};
int[] answer = new int[52];
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < alphabet.length; j++) {
if (s[i].equals(alphabet[j])) {
answer[j] += 1;
}
}
}
return answer;
}
}
class Solution {
public int[] solution(String my_string) {
int[] answer = new int[52];
for (int i = 0; i < my_string.length(); i++) {
char c = my_string.charAt(i);
if (c >= 'a') {
answer[c - 'a' + 26]++;
} else {
answer[c - 'A']++;
}
}
return answer;
}
}
'Coding Test > Java Coding Test' 카테고리의 다른 글
[프로그래머스 / 자바] - 두 수의 합 (0) | 2024.08.05 |
---|---|
[프로그래머스 / 자바] - 배열 만들기 4 (0) | 2024.08.04 |
[프로그래머스 / 자바] - 왼쪽 오른쪽 (0) | 2024.08.02 |
[프로그래머스 / 자바] - 배열 만들기 6 (0) | 2024.08.01 |
[프로그래머스 / 자바] - 문자열 계산하기 (0) | 2024.07.31 |