입력받은 문자열의 팬그램 여부를 확인해라.
문제 보자마자 아스키 코드를 떠올렸음. 왜냐하면 아스키 코드는 알파벳의 범위를 설정하기 매우 편하기 때문!
우선 알파벳 갯수 만큼 길이의 boolean 배열을 생성해줌.
입력 받은 값은 replaceAll과 toLowerCase를 체이닝 해 공백없는 소문자 문자열로 변환해줌.
for문을 돌려 문자열의 요소들을 charCodeAt으로 다 아스키 코드로 변환.
아스키 코드 상 영어 소문자의 범위는 97~122 사이 이므로
만약 변환된 값이 이 사이라면 미리 생성해놓은 배열에서 해당 값에서 97을 빼준 만큼의 값인 인덱스를 true로 변환.
for문 종료 후 배열에서 indexOf(false)가 -1를 리턴한다면 다 true로 바뀌었다는 뜻이므로 pangram 리턴.
아니면 not pangram 리턴.
'use strict';
const fs = require('fs');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', function(inputStdin) {
inputString += inputStdin;
});
process.stdin.on('end', function() {
inputString = inputString.split('\n');
main();
});
function readLine() {
return inputString[currentLine++];
}
/*
* Complete the 'pangrams' function below.
*
* The function is expected to return a STRING.
* The function accepts STRING s as parameter.
*/
function pangrams(s) {
const usedArr = Array(26).fill(false);
const lowerStr = s.replaceAll(' ','').toLowerCase();
for(let i = 0; i<lowerStr.length; i++) {
const charCode = lowerStr.charCodeAt(i);
if(charCode >= 97 && charCode <= 122 ) {
usedArr[charCode - 97] = true;
}
}
if(usedArr.indexOf(false) ===-1 ) return 'pangram';
return 'not pangram';
}
function main() {
const ws = fs.createWriteStream(process.env.OUTPUT_PATH);
const s = readLine();
const result = pangrams(s);
ws.write(result + '\n');
ws.end();
}
길이가 n이고 요소가 m인 배열 만드는 법 -> const arr= Array(n).fill(m)
string.replaceAll(pattern, replacement) => 문자열을 순회하면서 pattern을 replacement로 바꿔줌.
toLowerCase => 소문자 변환
string.charCodeAt(index) => 문자열 내 index의 값을 아스키 코드 값으로 변환해줌.