๐Ÿ“˜ TIL - ๋ฐฑ์ค€ 10820๋ฒˆ: ๋ฌธ์ž์—ด ๋ถ„์„

์ด์Šน์šฑยท2025๋…„ 8์›” 5์ผ

์ž๋ฐ”์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
2/36

๐Ÿ” ๋ฌธ์ œ ์š”์•ฝ
์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ ๋ฌธ์ž์—ด๋งˆ๋‹ค ํฌํ•จ๋œ ๋ฌธ์ž๋“ค์„ ๋‹ค์Œ ๋„ค ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•ด์„œ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ.

์†Œ๋ฌธ์ž (a~z)

๋Œ€๋ฌธ์ž (A~Z)

์ˆซ์ž (0~9)

๊ณต๋ฐฑ (space)

โœจ ํ•ต์‹ฌ ์•„์ด๋””์–ด
๐Ÿ“Œ ๋ฌธ์ž์—ด ์ˆœํšŒ + ๋ฌธ์ž ๋ถ„๋ฅ˜
๋ฌธ์ž์—ด์„ ํ•œ ๊ธ€์ž์”ฉ ์ˆœํšŒํ•˜๋ฉด์„œ Character ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ž ์œ ํ˜•์„ ํŒ๋ณ„ํ•œ๋‹ค.

๋ฌธ์ž์—ด๋งˆ๋‹ค ์†Œ๋ฌธ์ž, ๋Œ€๋ฌธ์ž, ์ˆซ์ž, ๊ณต๋ฐฑ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ๊ฐ ์นด์šดํŠธํ•œ๋‹ค.

์ž…๋ ฅ์ด ์ฃผ์–ด์ง€๋Š” ๋™์•ˆ ๊ณ„์† ๋ฐ˜๋ณตํ•ด์„œ ์ฒ˜๋ฆฌ (EOF ๋ฐฉ์‹)

๐Ÿง  ๋ฐฐ์šด ์ 
Character ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ

Character.isLowerCase(char) โ†’ ์†Œ๋ฌธ์ž์ธ์ง€ ํŒ๋ณ„

Character.isUpperCase(char) โ†’ ๋Œ€๋ฌธ์ž์ธ์ง€ ํŒ๋ณ„

Character.isDigit(char) โ†’ ์ˆซ์ž์ธ์ง€ ํŒ๋ณ„

char == ' ' โ†’ ๊ณต๋ฐฑ์ธ์ง€ ํŒ๋ณ„

EOF ์ž…๋ ฅ ์ฒ˜๋ฆฌ

while ((line = br.readLine()) != null)์„ ํ†ตํ•ด EOF๊นŒ์ง€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ˆœํšŒ

toCharArray() ๋˜๋Š” charAt(i) ๋ฐฉ์‹ ๋ชจ๋‘ ํ™œ์šฉ ๊ฐ€๋Šฅ

printf ํฌ๋งทํŒ… ์ถœ๋ ฅ

%d %d %d %d\n ํ˜•์‹์œผ๋กœ ๊น”๋”ํ•˜๊ฒŒ ์ถœ๋ ฅ ๊ฐ€๋Šฅ

๐Ÿง‘โ€๐Ÿ’ป ํ•ต์‹ฌ ์ฝ”๋“œ ์š”์•ฝ

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = br.readLine()) != null) {
    int lower = 0, upper = 0, digit = 0, space = 0;
    for (char ch : input.toCharArray()) {
        if (Character.isLowerCase(ch)) lower++;
        else if (Character.isUpperCase(ch)) upper++;
        else if (Character.isDigit(ch)) digit++;
        else if (ch == ' ') space++;
    }
    System.out.printf("%d %d %d %d%n", lower, upper, digit, space);
}

๐Ÿงฎ ์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„
ํ•ญ๋ชฉ ๋ถ„์„
์‹œ๊ฐ„ ๋ณต์žก๋„ O(N * L) โ†’ N = ์ค„ ์ˆ˜, L = ๋ฌธ์ž์—ด ๊ธธ์ด
๊ณต๊ฐ„ ๋ณต์žก๋„ O(1) โ†’ ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜ 4๊ฐœ๋งŒ ์‚ฌ์šฉ

๐ŸŽฏ ๋А๋‚€ ์ 
๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ๋ฌธ์ œ์—์„œ๋Š” ์ž๋ฐ”์˜ Character ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ๋ฅผ ์ ๊ทน ํ™œ์šฉํ•˜๋Š” ์Šต๊ด€์ด ์ค‘์š”ํ•˜๋‹ค.

EOF ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋Š” ๋ฐฑ์ค€์—์„œ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋ฏ€๋กœ ์ต์ˆ™ํ•ด์งˆ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

๋‹จ์ˆœํ•œ ๋ฌธ์ œ๋”๋ผ๋„ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

์ž…๋ ฅ ์กฐ๊ฑด์ด ์ž‘์œผ๋ฉด ๋ณต์žกํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์—†์ด๋„ ๋‹จ์ˆœ ์ˆœํšŒ + ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“š ๊ด€๋ จ ๊ฐœ๋… ๋ณต์Šต
BufferedReader vs Scanner: ์ž…๋ ฅ ์†๋„ ์ฐจ์ด

printf ์ถœ๋ ฅ ํฌ๋งท

Character ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜

์ž๋ฐ”์—์„œ EOF ์ž…๋ ฅ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

profile
์•„๋Š”๊ฑฐ ์—†๋Š” ์ „๊ณต์ž

0๊ฐœ์˜ ๋Œ“๊ธ€