본문 바로가기
Coding Test/Java Coding Test

[프로그래머스 / 자바] - 문자 개수 세기

by nam_ji 2024. 8. 3.

프로그래머스 문자 개수 세기 - 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;
    }
}