본문 바로가기
알고리즘 스터디/백준 알고리즘 기초 1

[백준 10820번 문자열 분석 - node.js] [알고리즘 기초 1/2]

by 레일라오리덕 2021. 7. 29.
728x90

https://www.acmicpc.net/problem/10820

 

10820번: 문자열 분석

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

www.acmicpc.net

 

문제

 

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

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

 

입력

 

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

 

출력

 

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

 

예제 입출력

 

입력 출력
This is String
SPACE 1 SPACE
S a M p L e I n P u T
0L1A2S3T4L5I6N7E8
10 2 0 2
0 10 1 8
5 6 0 16
0 8 9 0

 

풀이[node.js]

 

 

728x90

이번 문제는 input[i]값이 공백으로 들어오는 경우엔 처리하지 않아야 정답이 나온다는 사실을 깨닫느라 시간을 많이 할애했습니다.

문제 자체는 어렵지 않으나, input에 ''값이 들어온 경우, answer에 0 0 0 0이 들어가게서 틀렸다고 채점결과가 나오니 주의하셔야합니다.

문제는 쉽습니다. input[i]를 split해서 해당 값이 a에서 z사이의 값이면 answer[0]추가, A에서 Z사이의 값이면 answer[1]추가와 같은 방식으로 문제를 풀어주면 됩니다.

var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().split('\n');
var result = ''; 
for(var i in input){
    if(input[i] === '') continue;
    var answer = [0, 0, 0, 0];
    var splited = input[i].split('');
    for(var j in splited){
        if( splited[j] >='a' && splited[j]<='z' ){
            answer[0]++;
        }else if( splited[j] >='A' && splited[j] <='Z' ){
            answer[1]++;
        }else if(splited[j]>='0' && splited[j]<='9' ){
            answer[2]++;
        }else if( splited[j] === ' '){
            answer[3]++;
        }
    }
    result += answer.join(' ') + '\n';
}
console.log(result.trim());
728x90

댓글