๐ ๋ฌธ์ ์์ฝ
์ฌ๋ฌ ๊ฐ์ ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋, ๊ฐ ๋ฌธ์์ด๋ง๋ค ํฌํจ๋ ๋ฌธ์๋ค์ ๋ค์ ๋ค ๊ฐ์ง๋ก ๋ถ๋ฅํด์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ .
์๋ฌธ์ (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 ์ ๋ ฅ ์ฒ๋ฆฌ ๋ฐฉ์