[백준 | Javascript] 10809

박기영·2022년 5월 18일
0

백준

목록 보기
46/127

문자열 3단계
10809번. 알파벳 찾기

문제

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

출력

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

예제 입출력

예제 입력

baekjoon

예제 출력

1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

solution

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString();

let asciiArr = [];

for(let i = 97; i <= 122; i++){
 asciiArr.push(input.indexOf(String.fromCharCode(i)));
}

console.log(asciiArr.join(' '));

solution 2

const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("");

let map = new Map();

for(let i = 97; i <= 122; i++){
    map.set(i, -1);
}

// 알파벳이 처음 등장한 인덱스를 표시해줘야함
// 여러 번 나오면 가장 앞에 있었던 인덱스만 표시!
for(let i = 0; i < input.length; i++){
    let ascii = input[i].charCodeAt();
    
    if(map.has(ascii)){
        // 만약 key가 ascii인 녀석의 value가 -1이 아니라면
        // 이미 한번 나왔던 것이므로, 다음 문자열로 넘어간다.
        if(map.get(ascii) !== -1){
            continue;
        } else {
            map.set(ascii, i);
        }
    }
}

let arr = Array.from(map.values());

console.log(arr.join(" "));

해설

아스키 코드의 알파벳 소문자 번호인 97~122를 fromCharCode()를 이용해 아스키 코드 번호로 변환했다.
변환된 값을 indexOf()를 이용해 입력 데이터로 받아온 문자열 내부에 존재한다면 해당 인덱스 번호를 할당, 아니면 -1을 할당했다.
참고 사이트

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글