Charlloss Dev

Charlloss'Dev Technology & TIL(Today I Learn) Blog

Loops

Loops

Task

Complete the vowelsAndConsonants function in the editor below. It has one parameter, a string, $s$, consisting of lowercase English alphabetic letters (i.e., a through z). The function must do the following:

  1. First, print each vowel in $s$ on a new line. The English vowels are a, e, i, o, and u, and each vowel must be printed in the same order as it appeared in $s$.
  2. Second, print each consonant (i.e., non-vowel) in $s$ on a new line in the same order as it appeared in $s$.

Input Format

Locked stub code in the editor reads string $s$ from stdin and passes it to the function.

Output Format

First, print each vowel in $s$ on a new line (in the same order as they appeared in $s$). Second, print each consonant (i.e., non-vowel) in $s$ on a new line (in the same order as they appeared in $s$).

Sample Input 0

javaScript

Sample Output 0

a
a
i
o
o
j
v
s
c
r
p
t
l
p
s

Dev

'use strict';

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', inputStdin => {
    inputString += inputStdin;
});

process.stdin.on('end', _ => {
    inputString = inputString.trim().split('\n').map(string => {
        return string.trim();
    });

    main();    
});

function readLine() {
    return inputString[currentLine++];
}

/*
 * Complete the vowelsAndConsonants function.
 * Print your output using 'console.log()'.
 */
function vowelsAndConsonants(s) {
    const vewels = ['a', 'e', 'i', 'o', 'u'];

    let sArray = s.split("");
    for (let i = 0; i < sArray.length; i++) {
        for (let j = 0; j < vewels.length; j++) {
            if (sArray[i] === vewels[j]) {
                console.log(sArray[i]);
                break;
            }
        }
    }

    for (let k = 0; k < sArray.length; k++) {
        for (let j = 0; j < vewels.length; j++) {
            if (sArray[k] === vewels[j]) {
                break;
            }

            if (j === 4) console.log(sArray[k]);
        }
    }
}

Study

Javascript 문자열 자르기

splice

splice는 특정 시작 인덱스부터 끝 인덱스까지에 값을 추가하거나 그 자리에 있는 값을 삭제할 수 있는 메서드이다.

myArray = [1, 2, 3, 4, 5];
myArray.splice(2, 3);

Return [1, 2]

var arr = ["A","C","D","A","E","F","A"];

var arr_splice = arr.splice(1,3); // 1번부터 3개의 ["C","D","A"]를 꺼낸다. 리턴값은 꺼낸값
console.log(arr); // ["A", "E", "F", "A"]

var arr2 = ["A","C","D","A","E","F","A"];
var arr2_splice = arr2.splice(1,3,"a"); // 1번부터 3개의 ["C","D","A"]를 삭제하고 그자리에 "a"를 삽입한다. 리턴값은 꺼낸값
console.log(arr2); // ["A", "a", "E", "F", "A"]

3번째 인자값에 값을 전달하면 삭제한 위치에 전달된 값을 전달한다

인자값을 하나만 전달하면 그 인덱스를 포함한 뒤에있는 모든 원소를 삭제한다.

var arr = ["A","C","D","A","E","F","A"];

arr.splice(3); // 3번 인덱스를 포함한 뒤의 모든 원소 ["A","E","F","A"] 제거
console.log(arr); // ["A", "C", "D"]

indexOf와 결합해서 사용하면 특정 값을 찾아 삭제하거나 변경할수도 있다.

// 삭제
var arr = ["A","C","D","A","E","F","A"];

arr.splice(arr.indexOf("A"),1); // "A"를 찾아서 삭제한다.
console.log(arr); // ["C", "D", "A", "E", "F", "A"]
// 변경
var arr = ["A","C","D","A","E","F","A"];

arr.splice(arr.indexOf("A"),1,"a"); // "A"를 찾아서 "a"로 변경한다.
console.log(arr); // ["a", "C", "D", "A", "E", "F", "A"]

값이 여러개가 포함되어 있을경우 반복문 루프를 돌려서 모두 삭제할 수도 있다.

for(let i = 0; i < vewels.length ; i++) {

    while(true) {
        const search = sArray.indexOf(vewels[i]);

        if (search != -1) {
            console.log(vewels[i]);
            sArray.splice(search, 1);
        }
        else break;
    }
}

Conclusion

억지로 결과를 뽑아냈다. 문자열 길이로 반복문 제어 중 모음을 먼저 출력하고 출력한 모음을 배열에서 삭제하는 바람에 원하는 결과가 제대로 나오지 않았다. 굉장히 초보적인 실수였지만, 당황스럽게 문제를 바로 발견하지 못하였다.


문자열을 삭제하지 않고, 재배열하여 출력하는 방법이 더 효율적일거 같다.