본문 바로가기
코테 - 자바

99클럽 코테 스터디 2일차 TIL + 문자열

by BIGENGINEER 2025. 4. 1.

문제

문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.

각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.

입력

첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.

출력

첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.

예제 입력 1 

This is String
SPACE    1    SPACE
 S a M p L e I n P u T     
0L1A2S3T4L5I6N7E8

예제 출력 1 

10 2 0 2
0 10 1 8
5 6 0 16
0 8 9 0

 


 

음 일단은 str 받아오고

- charAt(i)으로 반복해서 문장 내 단어나 공백 받아와서

- if문으로 돌리고 싶은데

 

받아온 문장을 어떻게 charAt(i)으로 반복문을 만들지 ?????????????

 

 

 

1. 1차 코드 

package WEEK2;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        String str = sc.nextLine();

        int c1 =0;
        int c2 =0;
        int c3 =0;
        int c4 =0;

        for(int i=0; i<str.length(); i++){

            if(str.charAt(i)>= 'a' && str.charAt(i)<= 'z'){
                c1++;
            }else if(str.charAt(i)>= 'A' && str.charAt(i)<= 'Z'){
                c2++;
            }else if(str.charAt(i)>= 0 && str.charAt(i)<= 9){
                c3++;
            }else if(str.charAt(i) == ' '){
                c4++;
            }
        }

        System.out.println(c1+' '+ c2+' '+ c3+' '+c4);

    }
}

 

- 가볍게 틀림

-> 문법 지식의 한계 이슈로 어디를 수정해야할 지 감이 안 잡힌다.

 

 

 

2. 코드 2차

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        while (sc.hasNextLine()) {  
            String str = sc.nextLine();

            int c1 = 0, c2 = 0, c3 = 0, c4 = 0;

            for (int i = 0; i < str.length(); i++) {
                char ch = str.charAt(i);

                if (ch >= 'a' && ch <= 'z') {
                    c1++;
                } else if (ch >= 'A' && ch <= 'Z') {
                    c2++;
                } else if (ch >= '0' && ch <= '9') {
                    c3++;
                } else if (ch == ' ') {
                    c4++;
                }
            }

            System.out.println(c1 + " " + c2 + " " + c3 + " " + c4);
        }

        sc.close();
    }
}

 

 

**수정

1) 우선 여러 줄을 입력받아야 하므로 while문으로 수정

- hasNextLine()으로 여러 줄을 받아옴

 

2) str.charAt(i)으로 받아온 것을 char ch로 치환해서 사용

 

3) 공백문자의 ASCII 값은 32이므로  c1+' ' 는 숫자로 계산됨. 그러므로 " "로 수정해야함.

 

!!! 맨날 잊음

4) charAt()은 char 타입이므로 0과 9는 문자열 '0', '9'로 비교해야한다. 

 

 

 

 

**회고

1) 일단 접근 방법이 맞은 적은 처음임. - 굉장히 뿌듯함

2) 여러 줄을 받아올 때 hasNextLine()으로 받아오는 것을 몰랐음 - 학습 필요

3) 항상 헷갈리는 숫자를 어떻게 받아오느냐 .. - 문자열인지 생각하기

4) 어제 스터디에서 charAt()을 배우고 나니 어떻게 사용해야할 지 알겠음

5) 단순히 공백을 출력할 때 ' ' 를 사용하는줄 알았는데, 이 부분도 새로 배움

 

 

** 내일 공부할 것

1) 자바 문법에 대한 학습

2) 인텔리제이 txt 받아오는 것 설정

3) 숫자, 문자열 구분하는 것 학습