[코테] HackerRank Pangrams

Dongmin Lee·2023년 5월 22일
0

코테

목록 보기
11/23

💿 문제

💾 문제 요약

입력받은 문자열의 팬그램 여부를 확인해라.

💿 풀이

문제 보자마자 아스키 코드를 떠올렸음. 왜냐하면 아스키 코드는 알파벳의 범위를 설정하기 매우 편하기 때문!

우선 알파벳 갯수 만큼 길이의 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의 값을 아스키 코드 값으로 변환해줌.

profile
어제보다 성장하기

0개의 댓글