상세 컨텐츠

본문 제목

[백준 10808번 알파벳 개수] 배열로 접근하면 좋은 이유

백준 자바

by 빙하둘리 2022. 12. 17. 01:14

본문

728x90

백준 10808번 알파벳 개수 같은 문제는 배열로 접근하면 좋은 이유

단어 처음인 b부터 끝 n까지 배열의 모든 요소들을 접근해야 된다. 그래서 시간 복잡도가 n인 배열을 쓰는 것이고

알파벳 개수를 담은 자료구조는 알파벳 a의 개수부터 z의 개수는 0개로 끝난다. 여기서  a부터 z 순서는 정해져있다. 그래서 굳이 push, pop 같은 거 안 써도 된다. 오히려 배열이 편하다고 생각이 든다. 그래서 배열을 쓰면 좋은 것.

 

구현 코드

import java.io.*;
import java.util.Arrays;

public class Main { // 1157, 15552번 참고
    //enhanced for문 개념 참고
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int[] check = new int[26];
        Arrays.fill(check, 0);// 초기값을 다 0으로 해준다.

        String str=br.readLine();
        //br.readLine()으로 받은 다음
        char[] word=str.toCharArray(); // 자바는 문자열의 끝을 표시하지 않는다
        //String형을 char형으로 바꿔야 돼
        //문자 하나씩 요소에 저장할 것이니까
        for(int e:word)
        {
            int d = (byte)e; // 아스키코드 변환
            int k;

            if(d>64 && d<91) {
                k=d-65; //k는 0~25
                check[k] += 1;
            }
            else if(d>96 && d<123)
            {
                k=d-97;//0~25
                check[k]+=1;
            }
        }

        for(int i=0; i< check.length; i++)
        {
            bw.write(String.valueOf(check[i]));
            //요소 하나하나인 e를 형 변환 해주기
            if(i!=check.length-1)
                bw.write(" ");
        }

        bw.flush();
        bw.close();
    }
}

 

 

참고자료) 이전 문제 참고-ValueOf 등의 함수 사용 방법, enhanced for문 참고(윤성우님 책)

728x90

관련글 더보기

댓글 영역