-
10820. 문자열 분석Baekjoon 2023. 5. 2. 02:13
문제
문자열 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
에러
더보기const fs = require("fs"); const readFileSyncAdd = "10820.txt"; const input = fs.readFileSync(readFileSyncAdd).toString().split('\n'); var ans, str, txt = []; for(var i in input) { str = input[i].split(''); ans = [0, 0, 0, 0]; for(var j in str) { if(str[j] >= 'a' && str[j] <= 'z') ans[0]++; if(str[j] >= 'A' && str[j] <= 'Z') ans[1]++; if(str[j] >= '0' && str[j] <= '9') ans[2]++; if(str[j] === ' ') ans[3]++; } txt.splice(txt.length, 0, ans.join(' ').trim()); } console.log(txt.join('\n').trim());
에러의 원인은 입력값이 보이는 대로 들어오지 않을 수도 있다는 점이다.
이게 무슨 뜻인가 하면... 위에 써있는 입력값은 백준에서 예시로 준 입력값이라는 것이지, 그 외에 다른 값이 들어와도 코드가 잘 돌아가야한다는 말이다.
위 코드에서, 빈 줄이 들어온다면 어떤일이 발생할까? (이건 빈 공백과는 다르다.)
만족하는 조건문이 없으니 0, 0, 0, 0 이 출력될 것이다.
즉, 입력값이 아래와 같다면 어떤 일이 발생할까?
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 0 0 0 0
이러면 될까 안될까... 당연히 안된다.
저런 빈 줄이 들어가는 것은 백준에서 흔하게 발생하는 일이라고 한다.
예시 입력값이 들어가는 것은 맞는데, 저렇게 빈 줄이 들어가는 일이 빈번하게 생긴다고(...)
그래서 빈 줄이 들어왔을 때 어떻게 할 지까지 코드에 포함시켜야했다.
(모든 예외상황을 생각해서 코드를 짜는 것이 항상 좋긴하다.)
그래서 최종적인 코드는 아래와 같다.
코드
const fs = require("fs"); const readFileSyncAdd = "10820.txt"; const input = fs.readFileSync(readFileSyncAdd).toString().split('\n'); var ans, str, txt = []; for(var i in input) { if(input[i] === '') continue; str = input[i].split(''); ans = [0, 0, 0, 0]; for(var j in str) { if(str[j] >= 'a' && str[j] <= 'z') ans[0]++; if(str[j] >= 'A' && str[j] <= 'Z') ans[1]++; if(str[j] >= '0' && str[j] <= '9') ans[2]++; if(str[j] === ' ') ans[3]++; } txt.splice(txt.length, 0, ans.join(' ').trim()); } console.log(txt.join('\n').trim());
'Baekjoon' 카테고리의 다른 글
11655. ROT13 (0) 2023.05.02 10845. 큐 (0) 2023.05.02 1157. 단어 공부 (0) 2023.04.09 9093. 단어 뒤집기 (0) 2023.04.09 10828. 스택 (0) 2023.04.09